No documents matching "xxx.h" could be found

QT中,添加一个新的窗体不如VC中那么方便,我们都知道VC或者C#中添加一个窗体,添加完后直接会生成对应的头文件和源代码文件。但在QT中如果你直接想在这个窗体设计器上为其添加代码(如给按钮增加click事件),则会弹出下面的对话框。
在这里插入图片描述
看到这个对话框,我们的第一反应是在工程中为其添加对应的头文件和资源代码文件,但这仅是我们的一厢情愿,这个对话框依旧存在。那么问题出在哪里呢?

(首先我猜测,你一定在添加窗体的时候选择的是没有类支持的窗体,也就是QT designer form,而不是QT Designer Form Class)

注意观察上面的提示,No documents matching “ui_mainwindow.h” could be found,也就是说它默认需要的是ui_mainwindow,而我们可能就没有满足它的要求,而是根据窗体名mainwindow.ui将头文件写成了mainwindow.h。
也许执拗的你还是不习惯将名字写成ui_mainwindow.h,你中意的是mainwindow.h,怎么办呢?
首先我们来到调试运行目录,果然发现了他们的踪迹:
在这里插入图片描述
打开他们我们发现,在这个文件中是描述的窗体的各类控件和元素的生成。按照道理来说已经没有什么问题了哦,怎么就会找不到它呢?

我们首先尝试再建立一个窗体,但这次我们直接通过QT Designer Form Class来建立一个窗体,看看QT Designer Form Class与QT Designer Form两种方式的差异在哪里。

在这里插入图片描述

在没有编译前后,发现与第一种方式相比没有什么变化,唯一不同的是在mainwindow.h中有对ui_mainwindow.h的描述和引用。
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();
    
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

MainWindow::~MainWindow()
{
    delete ui;
}

那么,我们有理由怀疑,这就是ui_mainwindow.h的出处啦,每次说找不到ui_mainwindow.h就是这里应该有描述,而我们通过第一种方式新建的From中缺少了它。

我们做一个实验,将项目中现有的mainwindow.ui删除,而采用QT Designer Form方式添加mainform.ui的form,结果发现添加PushButton的click事件时没有说不能匹配ui_mainwindow.h。

至此,我们将所有与mainwindow有关的ui,h,cpp文件都删除,通过QT Designer Form方式重新建立这三个文件,并且将上面的代码拷贝进入头文件,看看结果如何?

通过测试,我们将上述cpp代码和头文件代码分别拷贝到新建的cpp和h文件中,再给UI中添加一个按钮,并且给按钮添加click事件,非常正常,没有报错。

从上述的试验得知,其实只要在cpp文件中添加ui_mainwindow.h的包含引用即可避免这个报错发生,问题得到解决。

发布了116 篇原创文章 · 获赞 79 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/haigear/article/details/102645643