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

时间:2017-03-02 17:50:21

标签: c++ linux qt

我正在学习使用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

1 个答案:

答案 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。这就是你的派生类构造函数甚至不被调用的原因。