Почему Qt не видит мой слот?

Я пытаюсь добавить контекстное меню в дерево с помощью следующего кода:

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 ответ

Решение

Что я делаю неправильно?

Это может произойти, если вы пропустите объявление слота как реального слота. Вы можете использовать Q_SLOTS макросы для этого или просто slots, В вашем случае последнее более адекватно, потому что это просто приложение и главное окно.

Вы также должны убедиться, что вы не забыли использовать Q_OBJECT макрос в вашем заголовочном файле.

Другие вопросы по тегам