2010-04-12 70 views
3

我在我的mainWindow上使用QStackedWidget。 stackedWidget上的firstPageWidget包含3个按钮。现在,如果我按第一页上的第一个按钮,我想让stackedWidget显示第二页小部件。以下是详细信息QStackedWidget上的帮助

我试图像这样在我的主窗口连接

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

现在我想知道怎样的索引号的值传递给stackWidget设置CURRENTINDEX?

如果我的问题不太清楚,请告诉我,我会解释更多。

回答

5

您可能需要使用QSignalMapper类:

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

相反的按钮,你可以使用包含可选图标的QListWidget。 QListWidget有一个名为QListWidget::currentItemChanged (QListWidgetItem * current, QListWidgetItem * previous)的方法。我用这个方法在程序中我写了前一段时间......在那里,我写了一个函数on_change_widget(QListWidgetItem *current, QListWidgetItem *previous)我连接到信号currentItemChanged

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

这应该做的伎俩。

你应该看看Config Dialog Example,他们在那里使用相同的方法来交换小部件。

当然,您也可以使用普通按钮,与上述QSignalMapper chalup相关。

0

您还可以使用QButtonGroup和正确的ID设置到每个按钮,然后用叠插件插槽QStackedWidget::setCurrentIndex(int)

连接QButtonGroup信号 QButtonGroup::buttonClicked(int)