为什么Qt看不到我的插槽?

时间:2013-12-25 07:50:06

标签: c++ qt qobject qtcore qt-signals

我正在尝试使用以下代码向树添加上下文菜单:

void MainWindow::FileTreeContextMenu(const QPoint& pos)
{
    QPoint globalPos = ui->fileTree->viewport()->mapToGlobal(pos);
    QMenu menu;
    menu.addAction("New Group");

    QAction* selectedItem = menu.exec(globalPos);
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->fileTree->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->fileTree,
            SIGNAL(customContextMenuRequested(const QPoint&)),
            this,
            SLOT(FileTreeContextMenu(const QPoint&)));
}

但是,当我运行它时,我收到以下错误:

QObject::connect: No such slot MainWindow::FileTreeContextMenu(const QPoint&) 
  in ..\src\Fixer\mainwindow.cpp:23
QObject::connect:  (sender name:   'fileTree')
QObject::connect:  (receiver name: 'MainWindow')

我做错了什么?

1 个答案:

答案 0 :(得分:3)

  

我做错了什么?

如果省略将插槽声明为实际插槽,则可能会发生这种情况。您可以使用Q_SLOTS宏,也可以只使用slots。在你的情况下,后者更合适,因为它只是一个应用程序和一个主窗口。

您还需要确保不要忘记在头文件中使用Q_OBJECT宏。