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

《QDebug 2023年4月》

一、Qt Widgets 问题交流

二、Qt Quick 问题交流

1.Qt Creator 10.0 及之后的版本创建 Qt Quick 项目时没有 Qt5 和 qmake 选项

在线更新 Qt Creator 到 10.0 版本后,除了一堆 BUG,还有个很坑爹的问题,创建 Qt Quick 项目的模板移除了 Qt5 和 qmake 的支持。好在 Qt Creator 的项目模板是可以编译的,可以拿旧版本的 Qt Quick 项目模板放进去。

但是我浏览 Qt Creator 在 git 上的代码是有 qtquickapplication_compat 这个模板的,支持 Qt5 和 qmake,但是安装版里目前没有提供(截至 2023 年 4 月)。

Qt Creator git:https://github.com/qt-creator/qt-creator

代码库中 compat 模板路径: 

qt-creator\share\qtcreator\templates\wizards\projects\qtquickapplication_compat

我们拿到模板后,如果是在线安装的 Qt Creator ,放到:

Qt\Tools\QtCreator\share\qtcreator\templates\wizards\projects

这时重新打开 Qt Creator 就能使用 compat 这个模板了。

2.对 qml 基本类型 list 的编辑

在 Qt5 中,QML 的 list 类型只提供了 push 添加数据,或者重新赋值,没法 pop。到了 Qt6,实测可以对 list 调用 pop/shift 等操作。

Qt5 中可以先将 list 转为 js 的数组,编辑完后再重新赋值回去,以 ShapePath 为例:

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Shapes 1.15
import QtQuick.Controls 2.15

Window {
    id: root
    width: 640
    height: 480
    visible: true
    title: qsTr("Test Qml list")

    Shape {
        id: shape
        anchors.fill: parent
        ShapePath {
            id: shape_path
            strokeColor: "black"
            strokeWidth: 6
            fillColor: "transparent"
            capStyle: ShapePath.RoundCap

            property int joinStyleIndex: 2
            joinStyle: ShapePath.RoundJoin

            startX: 30
            startY: 30
            pathElements: [
                PathLine { x: 30; y: 30
                    Component.onCompleted: {
                        console.log("init item")
                    }
                    Component.onDestruction: {
                        console.log("free item")
                    }
                },
                PathLine { x: 100; y: 30 },
                PathLine { x: 30; y: 100 },
                PathLine { x: 100; y: 100 }
            ]
        }
    }

    Button {
        anchors.centerIn: parent
        text: "pop"
        onClicked: {
            console.log("len =", shape_path.pathElements.length)
            if (shape_path.pathElements.length <= 2)
                return;
            // Qt6 版本
            //let item = shape_path.pathElements.shift()
            // Qt5 版本
            let path = Array.from(shape_path.pathElements)
            let item = path.shift()
            shape_path.pathElements = path
            // 不主动释放只会在结束时释放,主动调用 destroy 不会触发 Component.onDestruction
            item.destroy()
            shape_path.startX = shape_path.pathElements[0].x
            shape_path.startY = shape_path.pathElements[0].y
        }
    }
}

三、其他

1.在 Windows 上设置开机启动遇到的路径问题

如果是通过注册表的形式设置程序开机启动,如:

HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run

那么程序的工作目录(working directory)就会在系统路径下,相当于命令行在别的目录启动一个程序。此时如果读写文件是相对于当前工作路径就可以能找不到文件,可以用 QCoreApplication::applicationDirPath() (即 exe 的相对路径)来拼接绝对路径,而不是直接 ./ 的形式,也可以设置:

QDir::setCurrent(QCoreApplication::applicationDirPath());

此外我们在程序中可能还要启动一些进程,可以将 exe 的目录设置为工作目录,而不是直接继承当前的环境,否则可能报错找不到依赖库或者 plugin。如果是 QProcess 的话,接口如下:

QProcess p;
p.setWorkingDirectory(QCoreApplication::applicationDirPath());

QProcess::startDetached(program, arguments, QCoreApplication::applicationDirPath());

2.Mac 上使用 QtCreator qmake 编译,报错提示 SDK 版本过高

参考:https://blog.csdn.net/qq_35664104/article/details/121480884

之前在 MacOS 10.14 上使用 Qt5.15 + XCode 正常,在 MacOS 12 上下载了对应版本的 XCode 后用 Qt5.15 qmake 编译就报错。

在 pro 中加上一些设置:

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.15 // 使用对应版本SDK
CONFIG += sdk_no_version_check // 忽略版本检测


http://www.kler.cn/a/16774.html

相关文章:

  • 阿里巴巴通义灵码推出Lingma SWE-GPT:开源模型的性能新标杆
  • 24/11/13 算法笔记<强化学习> DQN算法
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • MySQL_第13章_视图
  • 【juc】AbstractQueuedSynchronized为什么采用双向链表
  • Java基础-组件及事件处理(下)
  • 烟火识别智能监测系统 yolov5
  • 生物信息学中---数据集不平衡的处理方法
  • 小红书违禁词有哪些,小红书违禁词汇总分享
  • 来上海一个月的记录、思考和感悟
  • ffmpeg-mov-metadate不识别Bug修复
  • JUC多并发编程 Synchronized与锁升级
  • Spring的创建与使用
  • 两分钟成为 ChatGPT 国内高手【不要再拿ChatGPT当百度用了】
  • 武忠祥老师每日一题||定积分基础训练(三)
  • markdown二元运算符
  • Msfconsole使用永恒之蓝入侵Win7并上传执行可执行文件
  • 【学习心得】Python多版本控制
  • 常用半导体器件
  • 数字孪生可视化平台开发 打通现实与虚拟世界
  • springboot第12集:DAO功能代码
  • vue基本语法
  • 通关MyBatis(上)
  • 二本做程序员有出路吗
  • python异常及其捕获
  • BM50-两数之和