【问题标题】:Connect slots from another class not working in Qt连接来自另一个类的插槽在 Qt 中不起作用
【发布时间】:2017-11-18 14:26:01
【问题描述】:

我在button.h有这门课:

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()));

然后就可以了。
我想知道为什么?以及如何解决上述问题?
谢谢。

【问题讨论】:

    标签: c++ qt qt5 qt-signals qt-slot


    【解决方案1】:

    如果在函数中创建了一个变量,它只存在于该函数中,那么它将无法访问,这就是我认为正在发生的情况,我建议您将 mButtons 设为该类的成员。

    *.h

    private:
        Buttons mButtons;
    

    【讨论】:

    • 我尝试了你的建议,但问题仍然存在。我不认为这是解决方案。顺便说一句,我创建了变量并在同一个函数中连接了信号和插槽。那么你知道解决这个问题的其他方法吗?
    • @TheodoreTang 我试图用你展示给我的东西和我的修改来重现你的项目,它已经奏效了,也许我假设了其他事情,你可以分享你的项目以便能够测试它。
    • 我发现在我为我的班级制作 mButtons 后,我忘记删除该函数中 mButtons 的声明。我删除了它并且它起作用了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多