我在mainWindow上使用QStackedWidget。 stackedWidget上的firstPageWidget包含3个按钮。现在如果我按第一页上的第一个按钮,我希望stackedWidget显示第二页面小部件。以下是详细信息
我试图在我的主窗口
中这样连接connect(firstPageWidget->button1,SIGNAL(clicked()),stackWidget,SLOT(setCurrentIndex(int)));
现在我想知道如何将index number的值传递给stackWidget来设置currentIndex?
如果我的问题不太明确,请告诉我,我会解释更多。
答案 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)
连接