有关QStackedWidget的帮助

时间:2010-04-12 04:30:42

标签: qt widget

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

我试图在我的主窗口

中这样连接
connect(firstPageWidget->button1,SIGNAL(clicked()),stackWidget,SLOT(setCurrentIndex(int)));

现在我想知道如何将index number的值传递给stackWidget来设置currentIndex?

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

3 个答案:

答案 0 :(得分: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)));

答案 1 :(得分:0)

您可以使用包含可选图标的QListWidget而不是按钮。 QListWidget有一个名为QListWidget::currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous )的方法。我在前一段时间编写的程序中使用了该方法...在那里我编写了一个函数on_change_widget( QListWidgetItem *current, QListWidgetItem *previous ),我将其连接到SIGNAL currentItemChanged

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

这应该可以解决问题。

您应该查看Config Dialog Example,他们使用相同的方法来交换小部件。

当然,您也可以使用普通按钮,与所提到的QSignalMapper chalup相关。

答案 2 :(得分:0)

您还可以使用QButtonGroup并为每个按钮设置正确的ID,然后将QButtonGroup信号QButtonGroup::buttonClicked(int)与堆叠的小部件插槽QStackedWidget::setCurrentIndex(int)连接