我正在学习使用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
答案 0 :(得分:0)
实际上,quit()
或其后代QWidget
中没有QMainWindow
个广告位。
您应该使用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
。这就是你的派生类构造函数甚至不被调用的原因。