连接来自另一个 class 的插槽在 Qt 中不起作用
Connect slots from another class not working in Qt
我在 button.h
中有这个 class:
class Buttons : public QObject
{
Q_OBJECT
public:
Buttons();
QVector<QPushButton*> buttons;
public slots:
void getBtnInfo();
};
在 mainwindow.cpp
中,我这样连接:
Buttons mButtons;
for(int i = 0; i < mButtons.buttons.size(); i++) {
mButtons.buttons[i] = new QPushButton(mCentralWidget);
...
connect(mButtons.buttons[i], SIGNAL(clicked(bool)), &mButtons, SLOT(getBtnInfo()));
}
它运行没有任何错误;但是 getBtnInfo() slot
似乎什么也没做。因为我试过只是在这个插槽中调试,没有工作。
但是,如果我在 mainwindow.h
中声明 getBtnInfo() slot
并像这样连接:
connect(mButtons.buttons[i], SIGNAL(clicked(bool)), this, SLOT(getBtnInfo()));
然后就可以了。
我想知道为什么?以及如何解决上述问题?
谢谢。
如果一个变量是在一个函数中创建的,它只存在于那个函数中,那么它将不可访问,这就是我认为正在发生的事情,我建议你让 mButtons 成为 class.
*.h
private:
Buttons mButtons;
我在 button.h
中有这个 class:
class Buttons : public QObject
{
Q_OBJECT
public:
Buttons();
QVector<QPushButton*> buttons;
public slots:
void getBtnInfo();
};
在 mainwindow.cpp
中,我这样连接:
Buttons mButtons;
for(int i = 0; i < mButtons.buttons.size(); i++) {
mButtons.buttons[i] = new QPushButton(mCentralWidget);
...
connect(mButtons.buttons[i], SIGNAL(clicked(bool)), &mButtons, SLOT(getBtnInfo()));
}
它运行没有任何错误;但是 getBtnInfo() slot
似乎什么也没做。因为我试过只是在这个插槽中调试,没有工作。
但是,如果我在 mainwindow.h
中声明 getBtnInfo() slot
并像这样连接:
connect(mButtons.buttons[i], SIGNAL(clicked(bool)), this, SLOT(getBtnInfo()));
然后就可以了。
我想知道为什么?以及如何解决上述问题?
谢谢。
如果一个变量是在一个函数中创建的,它只存在于那个函数中,那么它将不可访问,这就是我认为正在发生的事情,我建议你让 mButtons 成为 class.
*.h
private:
Buttons mButtons;