Qt 5.0,包括个人标题问题

Qt 5.0 including personal header issues

本文关键字:标题 问题 包括个 Qt      更新时间:2023-10-16

看,我对用Qt在c++中编程有点陌生,所以我在win 7 64位上下载了5.0版本。我制作了一个名为Mafentre的类,并实现了它的代码,它看起来很完美,但当我尝试运行主程序时,它说C: \Users\Zbart3i\Downloads\Programs\test\main.cpp:3:错误:C1083:无法打开包含文件:'Mafentre.h':没有这样的文件或目录

这是我的专业代码:

SOURCES += 
    main.cpp 
    mafenetre.cpp
QT+=widgets
HEADERS += 
    mafenetre.h

这是Mafentre.h:的代码

#ifndef MAFENETRE_H
#define MAFENETRE_H

include <   QtWidgets>
class Mafenetre:public QWidget
{
public:
    Mafenetre();
private:
    QPushButton *m_bouton;
};
#endif // MAFENETRE_H

这是Mafentre的网站:

#include      "mafenetre.h"
Mafenetre::Mafenetre():QWidget()
{
    setFixedSize(300,150);
    m_bouton=new QPushButton("pimp mon bouton",this);
    m_bouton->setFont(QFont("monotype corsiva",15));
    m_bouton->setCursor(Qt::PointingHandCursor);
}

和main.cpp

#include<    QtWidgets/QApplication>
#include<    QtWidgets>
#include<    Mafenetre.h>

void main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Mafenetre fenetre;

    fenetre.show();
    app.exec();
}

在C++中,应该使用#include"name">,而不是#include(引号而不是三角括号(,因为它们有不同的含义。

#include在安装库(包括标准库(的某些目录中查找。#include"name">首先在项目的文件夹中查找,然后检查其他目录。

好吧,从技术上讲,准确地说,它们在哪个文件夹中查找,并且按照一个顺序,是编译器特定的。

此:

#include <Mafenetre.h>

应该是这样的:

#include "Mafenetre.h"

阅读:

MinGW#包括搜索目录

默认搜索的其他目录

目录的最小列表,如所述标识上面提到的指定了默认情况下将被搜索的唯一位置,用于系统头文件或与用户安装的关联的头图书馆;然而,有一个例外。敏锐的读者可能注意到include文件搜索路径在顺序列表,其中第二个与第一个串联;但是,第一个,标识为#include"…"搜索列表似乎是空的。事实上,这种明显的空虚可能误导除非用户在调用时指定"-I-"选项GCC,此列表只包含一个目录:包含#include"file"指令的源文件存在。

请注意,这一个附加目录不会搜索用#include指令的#include <file>形式指定的头;它仅适用于使用指令的CCD_ 2形式指定的那些标头

并确保您的"Mafentre.h"文件与您的main.cpp文件位于同一文件夹中。否则,您需要执行#include"folderPath/fileName.h",并将路径添加到.pro文件中的SOURCESHEADERS变量。

还要确保拼写相同,并使用正确的大小写——有时很重要,有时不重要。

如果您仍然有问题,请尝试编译一个仅由一个main.cpp组成的简单项目,以确保所有内容都安装正确。

您确定包含了正确的标题吗。此外,我没有看到您在头文件中使用QObject宏。应该是这样的:

Mafentre.h:

#ifndef MAFENETRE_H
#define MAFENETRE_H
#include <QWidget>
    class Mafenetre : public QWidget
    {
        Q_OBJECT
    public:
        explicit Mafenetre(QWidget *parent = 0);
    signals:
    public slots:
    };
    #endif // MAFENETRE_H

Mafentre.cpp:

#include "mafenetre.h"
Mafenetre::Mafenetre(QWidget *parent) :
    QWidget(parent)
{
}

最后你main.cpp应该是这样的,检查标题:

......
#include "mafenetre.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Mafenetre m;
    m.show();
    return a.exec();
}