【问题标题】:No matching signal for QAction, no "go to slot" menu entryQAction 没有匹配信号,没有“转到插槽”菜单条目
【发布时间】:2014-05-08 03:55:45
【问题描述】:

我在实际运行使用 QtCreator 创建的 QAction 时遇到问题。运行例如actionSystemSettings,我在 MainWindows 中添加了 slot,所以它看起来像这样:

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_menuWork_actionSystemSettings();

private:
    Ui::MainWindow *ui;
};

还有这个:

void MainWindow::on_menuWork_actionSystemSettings() {
    qDebug() << "Yay!";
}

提示:

QMetaObject::connectSlotsByName: 没有匹配的信号 on_menuWork_actionSystemSettings()

我想这是一个愚蠢的错误,我只是忘记了一些东西,但是阅读文档并没有给我任何帮助。我没有应该自动创建一些模板的“转到插槽”菜单条目......至少 Visual Studio for C# 做到了。

【问题讨论】:

    标签: c++ qt qt-creator


    【解决方案1】:

    当您定义插槽时,正确的方法是:

    on_<widget_name>_<signal>
    

    例如,如果您必须命名您的插槽

    private slots:
        on_actionSystemSettings_triggered();
    

    QtAutoConnect

    【讨论】:

      【解决方案2】:

      根据QMetaObject::connectSlotsByName()的文档:

      递归搜索给定对象的所有子对象,并且 将来自它们的匹配信号连接到跟随的对象槽 如下形式:

      void on_object-name_signal-name(信号参数);

      所以,我认为您的广告位应该具有以下签名:

      void MainWindow::on_actionSystemSettings_triggered()
      {
          //
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        • 1970-01-01
        • 2014-05-01
        相关资源
        最近更新 更多