2010-04-12 7 views
3

J'utilise un QStackedWidget sur ma mainWindow. Le firstPageWidget sur stackedWidget contient 3 boutons. Maintenant Si je vais appuyer sur le premier bouton sur firstPage, je veux que le stackedWidget affiche le widget 2nd Page. Voici les détailsAide sur QStackedWidget

J'essayé de se connecter comme ça dans mon mainwindow

connect(firstPageWidget->button1,SIGNAL(clicked()),stackWidget,SLOT(setCurrentIndex(int))); 

Maintenant, je veux savoir comment passer la valeur du numéro d'index à stackWidget pour définir currentIndex?

Si ma question n'est pas très claire s'il vous plaît dites-moi, je vais vous expliquer plus.

Répondre

5

Vous devez probablement utiliser QSignalMapper classe:

QSignalMapper mapper = new QSignalMapper(); // don't forget to set the proper parent 
mapper->setMapping(firstPageWidget->button1, 2); // 2 can be replaced with any int value 
connect(firstPageWidget->button1, SIGNAL(clicked()), mapper, SLOT(map())); 
connect(mapper, SIGNAL(mapped(int)), stackWidget, SLOT(setCurrentIndex(int))); 
0

au lieu des boutons, vous pouvez utiliser un QListWidget contenant des icônes sélectionnables. QListWidget a une méthode appelée QListWidget::currentItemChanged (QListWidgetItem * current, QListWidgetItem * previous). J'ai utilisé cette méthode dans un programme je l'ai écrit il y a quelque temps ... Là, j'écrit une fonction on_change_widget(QListWidgetItem *current, QListWidgetItem *previous) que je connecté au signal currentItemChanged:

connect(my_list_widget, 
     SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), 
     this, 
     SLOT(on_change_widget(QListWidgetItem *, QListWidgetItem *)) 
     ); 

Cela devrait faire l'affaire.

Vous devriez jeter un oeil à la Config Dialog Example, là ils utilisent la même méthode pour échanger des widgets.

Bien sûr, vous pouvez également utiliser des boutons normaux, en rapport avec le problème QSignalMapper mentionné.

0

Vous pouvez également utiliser QButtonGroup et Set ID propre à chaque touche, puis connecter le signal QButtonGroup QButtonGroup::buttonClicked(int) avec fente widget de empilés QStackedWidget::setCurrentIndex(int)