error: C1083: 无法打开包括文件: “QtGui/QApplication”: No such file or directory

news/2025/1/15 15:37:11/

Qt系列文章目录

文章目录

  • Qt系列文章目录
  • 前言
  • 一、原因
  • 二、解决办法
    • 1.修改pro工程文件
    • 2.在main.cpp中
  • 三、总结

前言

当我们从网上或者从打开别人的工程师,报错,C1083: 无法打开包括文件: “QtGui/QApplication”。
原因:Qt5里不再用QtGui模块,而是使用QtWidgets模块。
error: C1083: 无法打开包括文件: “QMainWindow”: No such file or directory
error: C1083: 无法打开包括文件: “QGraphicsItem”: No such file or directory
error: C1083: 无法打开包括文件: “QGraphicsView”: No such file or directory
error: ‘QApplication’ file not found
error: C1083: 无法打开包括文件: “QtGui/QApplication”: No such file or directory

在这里插入图片描述

一、原因

报错是因为我们用Qt5打开Qt4版本时,Qt5里不再用QtGui模块,而是使用QtWidgets模块。
Qt5下,QWidget系列从QtGui中被剥离出去,成为单独的QtWidget模块。随着Qt Quick2的引入,QtDeclarative也逐渐和QWidget系列也脱离关系。

最终:在Qt5下的GUI编程,有两套不同的东西

QtWidget (使用一个被称为 BackingStore 的东西)

QtQuick (使用一个被称为 Scene Graph 的东西)

Qt4中的QDeclarativeView等一系列的东西被改成了QQuickView和QQmlItem等分别放到了QtQuick和QtQml模块。
QQuickView这一套框架完全脱离了QWidget的束缚,一路从QSurface到QWindow继承下来,虽说是窗口,但感觉却又不像是窗口。
QQuickView本能是使用OpenGL,使用硬件加速。

QQuickView 提供了一个窗体用于显示UI
QQmlEngine 提供QML运行的环境
QQuickWindow 显示窗体,以及对item对象的管理及用户交互

QQmlApplicationEngine 从Qt5.1开始提供的一个便捷对象 包含QQmlEngine和QQmlComponent能够根据一个qml文件创建一个application。

QQmlContext 类为对象的实例化以及表达式的评估提供了一个上下文环境。所有的对象都在一个特定的上下文中实例化,并且应用程序运行中要执行的表达式都在一个特定的上下文中执行。这个上下文定义了符号是如何被解析的,以及表达式操作的值。

QQmlComponent 类可以用来加载QML文档。它需要QQmlEngine来实例化定义在QML文档中的对象层次

一个典型的QML应用程序有一个C++函数的入口点,该入口点是:实例化一个QQmlEngine并且使用QQmlComponent加载一个QML文档。引擎(QQmlEngine对象)提供了一个默认的QQmlContext,这是一个顶级的上下文,用于执行定义在QML文档中的方法和表达式。定义在QML文档中的对象层次将会通过调用QQmlComponent实例化对象的create()方法被实例化。

客户端可能需要通过注入属性或者对象到上下文中修改引擎提供的默认QQmlContext。它们可以通过调用QQmlEngine::rootContext()方法来访问顶级的上下文。

在实例化对象之后,客户端通常就将控制权传递给应用程序的事件循环,以使得用户输入时间(例如鼠标点击)可以被应用程序分发和处理。

QML里面Row代表一行数据,所以item是按列来排的

QML里面Column是代表一列数据,所以Item是按行排的

在Row和Column中anchors(锚点)是不起作用的

RowLayout和ColumnLayout 也是代表一行与一列但是提供了多种的Layout附加属性并且可以使用anchors

二、解决办法

1.修改pro工程文件

在pro文件中加入:

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

在.pro里加上QT += widgets
在这里插入图片描述

2.在main.cpp中

删除:#include <QtGui/QApplication>
添加:#include

重新 qmake 再重新编译工程

在这里插入图片描述

//#include <QtGui/QApplication>#include "mainwindow.h"
#include "target.h"
#include <math.h>
#include "radarview.h"
#include <QTextCodec>
#include <QTime>
#include <QApplication>
static const int TargetCount = 200;int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;//w.show();
//    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));QGraphicsScene scene;scene.setSceneRect(-400,-300,800,600);scene.setItemIndexMethod(QGraphicsScene::NoIndex);for(int i = 0; i < TargetCount; ++i){Target * target = new Target;target->setPos(qrand()%800 - 400, qrand()%600 -300);target->setVisible(true);scene.addItem(target);}radarView view(&scene);view.setRenderHint(QPainter::Antialiasing);view.setViewportUpdateMode(QGraphicsView::FullViewportUpdate);view.setBackgroundBrush(QColor(0,0,0));view.setCacheMode(QGraphicsView::CacheBackground);view.setDragMode(QGraphicsView::ScrollHandDrag);view.setWindowTitle(QObject::tr("haizhan"));view.resize(800,600);view.show();return a.exec();
}

三、总结

不要想着安了Qt5,就直接用他来继续之前Qt4写的工程,不如还是用Qt4吧,有新工程从头开始可以使用Qt5。虽然digia官方说完美支持Qt4,一般情况下还是要修改配置的。


http://www.ppmy.cn/news/33709.html

相关文章

动态规划算法

一、前言动态规划是一种常用的算法&#xff0c;在算法领域十分重要&#xff0c;但对于新手来说&#xff0c;理解起来有一定的挑战性&#xff0c;这篇博客将明确步骤来一步一步讲解动态规划到底该如何理解与运用。二、解析动态规划算法1.特点①把原来的问题分解成了【要点相同】…

vue使用split()将字符串分割数组join()将数组转字符串reverse()将数组反转

1.split() 将字符串切割成数组 const str Hello Vue2 Vue3 console.log(str.split()) console.log(str.split()) console.log(str.split( )) console.log(str.split( , 2)) console.log(str.split( , 6))输出如下 1.split()不传参数默认整个字符串作为数组的一个元素&#xf…

Java Web 实战 15 - 计算机网络之网络编程套接字

文章目录一 . 网络编程中的基本概念1.1 网络编程1.2 客户端(client) / 服务器(server)1.3 请求(request) / 响应(response)1.4 客户端和服务器之间的交互数据1.4.1 一问一答1.4.2 多问一答1.4.3 一问多答1.4.4 多问多答二 . socket 套接字2.1 UDP 的 Socket API2.1.1 引子2.1.2…

嵌入式硬件电路设计的基本技巧

目录 1 分模块 2 标注关键参数 3 电阻/电容/电感/磁珠的注释 4 可维修性 5 BOM表归一化 6 电源和地的符号 7 测试点 8 网络标号 9 容错性/兼容性 10 NC、NF 11 版本变更 12 悬空引脚 13 可扩展性 14 防呆 15 信号的流向 16 PCB走线建议 17 不使用\表示取反 不…

web测试技术

一、Web 测试与传统测试的区别 相同之处 测试内容&#xff1a; 功能、性能、易用性、兼容性、安全性等 测试方法&#xff1a; 等价类边界值法、判定表法、状态迁移法&#xff0c;流程分析法、因果图法、错误猜测法等 测试手段&#xff1a; 人工测试、工具测试等不同之处 Web 测…

C++造轮子飙车现场之无锁、有锁环形队列实现

先看带锁的实现。 带锁版本 circular_queue.h // 头文件防卫 #ifndef CIRCULAR_QUEUE_H #define CIRCULAR_QUEUE_H#include <mutex> // 互斥量 #include <condition_variable> // 条件变量template <typename T> class CircularQueue { public:// 构造函数…

docker安装overleaf并升级texlive

20230321 0. 引言 之前在虚拟机安装了overleaf&#xff0c;应该是两年前的事情了&#xff0c;本来是想尝试一下overleaf更新了什么功能&#xff0c;但是没想到浪费了这么多时间。当时安装的还是2.5的版本&#xff0c;现在已经是3.5了。 在这个过程中&#xff0c;有几个地方需…

脱不下孔乙己的长衫,现代的年轻人该怎么办?

“如果我没读过书&#xff0c;我还可以做别的工作&#xff0c;可我偏偏读过书” “学历本该是我的敲门砖&#xff0c;却成了我脱不下的长衫。” 最近&#xff0c;“脱下孔乙己的长衫”在网上火了。在鲁迅的原著小说中&#xff0c;孔乙己属于知识阶级&#xff08;长衫客&#xf…