如何在Qt中的QStackedWidget上将我的QToolButton连接到setIndexPage?

Sur*_*dhi 1 user-interface qt

QStackedWidget的第一页设置为Wgt1.Wgt1包含3个按钮btn1,btn2

btn3

.我想做以下

  1. 小部件启动时,应将setIndex设置为零,这是我的第一页QStackedWidget.
  2. 当我按下btn1,btn2btn3,我应该分别移动到indexPage 1,2和3.

我想使用信号和插槽,所以试图连接到s 槽的clicked()信号.但它不起作用,因为不发送所需的任何(int)值.所以为此,我想要覆盖.我想做一些类似于在我的内容中引入一个新的东西,以便在按下第一页上的按钮时它会发出一些特定的整数值.QToolButtonetCurrentIndex(int)QStackedWidgetclick()setCurrentIndex(int)MousePressEvent(MouseEvent *e)signal(int)Wgt1

但要实现这一点,我不清楚如何遵循

  1. 哪个MousePressEvent()我应该覆盖?对于我Wgt1(包含按钮)或QToolButtons我的包含Wgt1
  2. 如果我想覆盖Wgt1我如何检测哪个QToolButton被按下QMousePressEvent
    1. 如果我想覆盖QToolButton如何写它?我应该创建一个派生自QToolButton的新类吗?或者我可以指定一些函数指针或事件处理程序MousePressEvent()

如果您可以回答上述问题,那将有所帮助,否则您可以建议任何其他方式来解决此问题.我不知道我是否清楚地解释了我的问题.请回复我将尝试解释更多.

roh*_*npm 5

有很多可能的解决方案,但我建议使用QSignalMapper.我认为覆盖事件处理程序比必要更复杂.

代码看起来像:

QSignalMapper* sm = new QSignalMapper(this);

// connect to `clicked' on all buttons
connect(btn1, SIGNAL(clicked()), sm, SLOT(map()));
connect(btn2, SIGNAL(clicked()), sm, SLOT(map()));
connect(btn3, SIGNAL(clicked()), sm, SLOT(map()));

// setMapping on each button to the QStackedWidget index we'd like to switch to
// note: this affects the value passed via QSignalMapper::mapped(int) signal
sm->setMapping(btn1, 1);
sm->setMapping(btn2, 2);
sm->setMapping(btn3, 3);

// finally, connect the mapper to the stacked widget
connect(sm, SIGNAL(mapped(int)), stackedWidget, SLOT(setCurrentIndex(int)));
Run Code Online (Sandbox Code Playgroud)