Qt无法手动连接到任何插槽(UI编辑器)

Qt can't connect to any slot manually (UI editor)

本文关键字:插槽 UI 编辑器 任何 连接 Qt      更新时间:2023-10-16

我正在学习使用QT。

为了易于编程,我使用UI-Editor。

问题

当我想连接我的qtreewidget时,它突然不想做任何事情。

我不想通过UI-Editor连接它,因为我(后来)想实现自己的插槽,而该插槽不会被编译器识别 (错误消息:didnt find slot ... in file ui_mainwindow.h,尽管插槽是在mainwindow.cpp中定义的,并在mainwindo.h中声明)

所以这是我的连接代码:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    //connects all the objects with the needed slots
     QObject::connect(ui->treeWidget, &QTreeWidget::clicked, QApplication::quit);

     ui->setupUi(this);
}

但是:当我单击Qtreewidget的任何项目时,它不会退出程序。

我绝对确定它是Qtreewidget而不是Qtreeview,我还使用Qt 5.7

的Linux( -> gnome)版本

另外,我没有任何警告/编译器错误。

因为我是QT的新生,所以我可能已经监督了一个简单的错误,在这种情况下,对不起:p

实际上,QWidget或其后代QMainWindow中没有quit()插槽。

您应该改用QCoreApplication::quit()


下面,qApp指的是QApplication实例:

QT 4 语法:

QObject::connect(ui->treeWidget, SIGNAL(clicked(QModelIndex)), qApp, SLOT(quit()));

qt 5 语法:

QObject::connect(ui->treeWidget, &QTreeWidget::clicked, QCoreApplication::quit);

QObject::connect(ui->treeWidget, &QTreeWidget::clicked, []{ QCoreApplication::quit(); });

更新

找到了这个问题。检查main.cpp文件,您正在创建QMainWindow实例,而不是MainWindow。这就是为什么您派生的类构造函数甚至都没有调用。