没有匹配的QAction信号,没有"进入插槽"菜单条目

时间:2014-05-07 19:30:45

标签: c++ qt qt-creator

I have auto-generated QMainWindow (MainWindows) with QMenuBar (menuBar) and QMenu (menuWork) in it.

实际运行QtCreator创建的QActions时遇到问题。要运行,例如actionSystemSettings,我已经向MainWindows添加了插槽,所以它看起来像这样:

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#做到了。

2 个答案:

答案 0 :(得分:1)

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

on_<widget_name>_<signal>

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

private slots:
    on_actionSystemSettings_triggered();

请参阅QtAutoConnect

答案 1 :(得分:0)

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

  

以递归方式搜索给定对象的所有子对象,以及   将来自它们的匹配信号连接到跟随的对象的插槽   以下表格:

     

void on_object-name_signal-name(signal-parameters);

所以,我认为你的插槽应该有以下签名:

void MainWindow::on_actionSystemSettings_triggered()
{
    //
}