当前位置: 首页 > news >正文

【Qt6项目转Qt5项目的一些API设置】

Qt6项目转Qt5项目的一些API设置

  • 本文目的
  • 我使用Qt5改好的仓库
  • 正文
    • 0. cmake的改动
    • 1. enterEvent
    • 2. nativeEvent
    • 3. #include <QOverload>
    • 4. QDesktopWidget
    • 5.QMouseEvent::globalPosition 不存在
    • 6.QMediaPlayer::setSource 不存在
    • 7.QMediaPlayer::playbackState 不存在
    • 8.无法打开源文件 "ui_QtAntDesign.h"
    • 9.字符串编码和 Qt

本文目的

以下面这个仓库为例:
https://github.com/byralpha/AntDesign

这个仓库是Qt6的项目,现在我们尝试使用cmake+qt5.15.2+vs2022将项目运行起来。

我使用Qt5改好的仓库

https://github.com/1AoB/AntDesign

正文

0. cmake的改动

在这里插入图片描述
改动说明:

  • qt6全改成qt5
  • OpenGLWidgets改为OpenGL
  • 有一个问题:
    在这里插入图片描述
    如上图:将qt6_wrap_ui(UI_HEADERS ${FORM_FILES})改为Qt5_wrap_ui(UI_HEADERS ${FORM_FILES}),因为使用的是不分大小的全部替换,如果程序找不到ui_*.h,注意这里改为qt5_wrap_ui(UI_HEADERS ${FORM_FILES})试试
  • 注意:
    在这里插入图片描述
    原CMakeLists.txt中,target_link_libraries(${PROJECT_NAME} PRIVATE Dwmapi)了两次,删掉前面那次(如上图所示),只保留后面的target_link_libraries

1. enterEvent

  • enterEvent 在 Qt5 的签名是:
void enterEvent(QEvent *event) override;
  • Qt6的写法:
void enterEvent(QEnterEvent *event) override;   // ❌ 这是 Qt6 的写法

2. nativeEvent

  • nativeEvent 在 Qt5 的签名是:
bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
  • Qt6的写法:
bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result) override;

3. #include

  • 实际上 Qt5 和 Qt6 都没有单独的 QOverload 头文件。
    QOverload 定义在 <QtCore/qobjectdefs.h> 里:
#include <QtCore/qobjectdefs.h>

4. QDesktopWidget

  • 在 Qt 5.15 中 QDesktopWidget 已经被 废弃 (deprecated),但仍然存在。

你可以加上#include <QDesktopWidget>来规避错误,也可以使用QScreen

// 老写法
QDesktopWidget *desktop = QApplication::desktop();
QRect screenRect = desktop->availableGeometry();// 新写法 (Qt 5.15 推荐)
QScreen *screen = QGuiApplication::primaryScreen();
QRect screenRect = screen->availableGeometry();

建议直接加上#include <QDesktopWidget>就行了,但是如果是写自己的项目,还是要用新API的

5.QMouseEvent::globalPosition 不存在

// Qt6 写法
// event->globalPosition()// Qt5 写法
event->globalPos()
//另外,在cpp中不需要event->globalPos().toPoint(),
//但是如果是Qt6的话,要写event->globalPosition().toPoint()
//因为在qt5中`QPoint::toPoint 不存在`
  • toPoint() 是 QPointF 的方法(Qt5、Qt6 都有)。

  • 在 Qt5 中 QPoint 本身就是整型点,没有 toPoint(),因为它已经是 QPoint 了。

6.QMediaPlayer::setSource 不存在

player->setSource改为player->setMedia

在这里插入图片描述

Qt6 写法:
player->setLoops(QMediaPlayer::Infinite);
在Qt5中没有对应的写法:
直接屏蔽掉,这个需要自己在qt5中造轮子

7.QMediaPlayer::playbackState 不存在

Qt6
if (player->playbackState() == QMediaPlayer::PlayingState) { ... }
Qt5改为:
if (player->state() == QMediaPlayer::PlayingState) { ... }

8.无法打开源文件 “ui_QtAntDesign.h”

首先,用everything查看一下ui_QtAntDesign.h是否存在,如果存在,这关掉vs2022,使用cmake重新生成一下,并打开vs2022应该就解决了。

9.字符串编码和 Qt

  • 为什么乱码
    这个项目使用的是utf-8编码,并且作者的电脑编码也是utf-8编码。
    我们git下来,程序也是utf-8编码,但是一般情况下(只要自己不主动修改),那这个微软电脑在中国区默认是GDK,程序编码与电脑不一致,所以乱码
  • 解决办法
    目的 :将"([\u4e00-\u9fa5]+)"替换为QString::fromLocal8Bit("$1")
  • 步骤:
  1. 打开 Ctrl+Shift+H → “在文件中替换”

  2. 勾选 使用正则表达式

(匹配中文字符串):
"([\u4e00-\u9fa5]+)"
说明:
[\u4e00-\u9fa5] 是 Unicode 中文范围"..." 包裹的中文字符串都会匹配
替换为:QString::fromLocal8Bit("$1")

注意:VS 正则的 $1 对应捕获组


如下图所示:

在这里插入图片描述


如果你想要ctrl + F 搜索的话,一定要打开 * 按钮

在这里插入图片描述

http://www.dtcms.com/a/415260.html

相关文章:

  • 音乐网站开发环境描述要建设一个网站需要准备些什么
  • display ip interface brief 概念及题目
  • asp网站整站下载器网站建设入什么科目
  • 网站建设国内排行如何做网站 知乎
  • 网站关于 模板三亚网站优化
  • Nginx部署vue以及转发配置记录
  • Elasticsearch - 分布式搜索与分析引擎
  • 网站开发者模式下载视频设计网站做多大合适
  • wordpress建企业商城南宁网站的优化
  • 通才机器人策略中的捷径学习:数据集多样性和碎片化的作用
  • 【轮播图】HTML+CSS+JavaScript实现轮播图
  • Low-Overhead Sensing RS Design for Integrated Sensing and Communication (ISAC)
  • 如何快速收录一个网站的信息网页设计与制作作业成品免费
  • MyEclipse在高分辨率显示屏上图标显示太小的解决方案
  • 网站 多语言处理wordpress搜索表单
  • Python 2025:物联网与边缘计算的智能融合新纪元
  • 小迪安全v2023学习笔记(九十讲)—— 小程序篇反编译外在主包分包配置泄露算法逆向未授权
  • 机器学习模型中异常样本、特征的三种常见分类与鉴别方法
  • 有口碑的常州网站建设建设网银怎么提高转账限额
  • 湖南响应式网站哪里有58同城怎么发布信息
  • 《前端开发中常用的快捷键大全》
  • 跳舞游戏做的广告视频网站平度建设局网站
  • 众筹网站建设公司金蝶官网首页
  • 智能汽车安全基石:通过CAS密钥管理系统实现全周期密钥管理与固件签名
  • 基于Python CNN推荐的电影资讯App软件的设计与实现
  • 如何识别网站的建站程序做网站的客户多吗
  • 找人做网站推广wordpress二次开发手册chm
  • 如何降低重复率?卷卷降AI
  • 建网站哪家好新闻wordpress 修改404
  • 基于微信小程序的智能在线预约挂号系统【2026最新】