如何从另一个“类”按钮更改CurrentIndex

时间:2019-04-24 08:00:18

标签: c++ qt widget

我有两节课;具有A-Ui->按钮的A类和具有B-Ui-> stackedWidget的B类。我想在释放按钮时从类A更改当前索引(ui-> stackedWidget-> setcurrentIndex(2))。

到目前为止,我已经尝试过:

我在B.cpp类中创建了一个函数,并在“ b.h”中声明为公共插槽:

void B::updatepage(int index) {

ui->stackedWidget->setcurrentIndex(index);

}

将信号连接到按钮;

connect( ui->pushButton, SIGNAL(released()), this, SLOT(updatepage(2));

但是,我在运行应用程序时没有出现任何错误,但是我无法实现我想要做的事情。

谢谢你的推荐。

1 个答案:

答案 0 :(得分:0)

您不能直接使用updatepage(2)来执行此操作,您只能在标头中声明具有默认值的函数的使用,但这将始终更改为第二页:

“ a.h”的内容:

#include "b.h"
class A {
...
public slots:
    void updatepage(int index = 2);
public:
    void setBDialogWindow(B* bDialogWindow);
...
private:
B* m_bDialogWindow;
...
};

在B的构造函数中,添加m_aDialogWindow的初始化和连接:

m_bDialogWindow = 0;
connect( ui->pushButton, SIGNAL(released()), this, SLOT(updatepage()));

并在实现中(“ a.cpp”):

void A::setBDialogWindow(B* bDialogWindow){
  m_bDialogWindow = bDialogWindow;
}

void A::updatepage(int index) {
  if ( m_bDialogWindow){
    m_bDialogWindow->ui->stackedWidget->setcurrentIndex(index);
  }
}

此外,您需要将B中的ui的访问权限更改为public,这不是一个好习惯,应该通过另一种方法来完成,但是示例是可以的。

最后,在main中,在B声明之后和b.show()之前添加以下内容:

a.setBDialogWindow(&w);