《我在技术交流群算命》(三):QML的Button为什么有个蓝框去不掉啊(QtQuick.Controls由Qt5升级到Qt6的异常)

有群友抛出类似以下代码和运行效果截图:

cpp 复制代码
import QtQuick
import QtQuick.Controls

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Button
    {
        anchors.centerIn: parent
        width: 100
        height: 40

        background: Rectangle {
            color: "red"
        }
    }
}

并提问(群友原话):

  • 这个为什么有蓝框
  • qml里边
  • 有人知道吗
  • 咋去掉

粗略一看,我寻思这莫不是消遣我?就这几行 QML 怎么可能出问题。但为了堵住群友的嘴,于是也建了个新工程加入以上代码,运行良好,截图发给群友以证明是群友人的问题。运行效果如图:

谁知群友看了后仍然是叫苦不迭,让人有点疑惑。仔细查看代码后,发现群友代码中对 QtQuick 控件的包含为:import QtQuick.Controls,于是明白群友是 Qt6 的环境(Qt5 import 组件需要加入版本号),切换 Qt6 环境后,复现了群友的问题,并发现控制台运行时报错:

qrc:/xx/Main.qml:16:21: QML QQuickRectangle: The current style does not support customization of this control (property: "background" item: QQuickRectangle(0x14f497fe250, parent=0x0, geometry=0,0 0x0)). Please customize a non-native style (such as Basic, Fusion, Material, etc). For more information, see: https://doc.qt.io/qt-6/qtquickcontrols2-customize.html#customization-reference

由于没怎么用 Qt6 的 QtQuick,所有此错误还是第一次遇到,根据提示复制错误中最后的链接,看到Qt官方文档中如下内容:

给出的样例中,import 组件使用的是:

复制代码
import QtQuick.Controls.Basic

与Qt5不同的是,对 QtQuick.Controls 的引入后面加了 .Basic,查看文档上下文,大概意思就是可以自定义 style,Basic 可看做 Qt5 QtQuick.Controls 的默认 style,不加 .Basic 的情况下,以WIndows操作系统为例,会认为你默认使用了.Windows,而这种 style 不支持覆盖 background 属性,如图加入 .Windows 后 IDE 给出警告:

修改为 import QtQuick.Controls.Basic 就可正常运行。

看来 Qt6 对 QtQuick 的大改,所言非虚。群友终于有用了一回。

相关推荐
Never_Satisfied2 分钟前
在JavaScript中,将包含HTML实体字符的字符串转换为普通字符
开发语言·javascript·html
仟千意3 分钟前
C++:c++基础知识
c++
开开心心就好18 分钟前
电脑音质提升:杜比全景声安装详细教程
java·开发语言·前端·数据库·电脑·ruby·1024程序员节
t1987512825 分钟前
基于多假设跟踪(MHT)算法的MATLAB实现
开发语言·matlab
DolphinScheduler社区27 分钟前
Apache DolphinScheduler 3.3.2 正式发布!性能与稳定性有重要更新
大数据·开源·apache·任务调度·海豚调度·发版
跟着珅聪学java28 分钟前
在Java中判断Word文档中是否包含表格并读取表格内容,可以使用Apache POI库教程
java·开发语言·word
SeaTunnel32 分钟前
Apache SeaTunnel 支持 Metalake 开发了!避免任务配置敏感信息暴露
大数据·开源·apache·个人开发·数据集成·seatunnel·看开源之夏
我也要当昏君41 分钟前
5.3 【2012统考真题】
开发语言·智能路由器·php
木木木丫1 小时前
嵌入式项目:韦东山驱动开发第六篇 项目总结——显示系统(framebuffer编程)
c语言·c++·驱动开发·dsp开发