《QDebug 2022年12月》

news2024/9/24 3:18:16

一、Qt Widgets 问题交流

二、Qt Quick 问题交流

1、在 C++ 中关联 QQuickWindow 的 closing 信号提示 "使用了未定义类型QQuickCloseEvent"

因为 closing 信号中的参数类型是 private 模块中定义的,但是通过第二句提示我们知道找到了完整定义才能使用 Q_DECLARE_METATYPE(T*) ,而 Qt 提供了不透明指针宏 Q_DECLARE_OPAQUE_POINTER ,使得应用 Q_DECLARE_METATYPE(T*) 时不必找到完整定义。

加上此宏后即可以编译通过,只是不能接收这个参数:

Q_DECLARE_OPAQUE_POINTER(QQuickCloseEvent*)
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [&myobj, url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
        QQuickWindow *win = qobject_cast<QQuickWindow*>(obj);
        if (win) {
            QObject::connect(win, &QQuickWindow::closing, [](){});
        }
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

另一种能够通过编译的方式是使用 SIGNAL/SLOT 宏来关联信号槽:

QObject::connect(win, SIGNAL(closing(QQuickCloseEvent*)),
                 &myobj, SLOT(onClose()));

2、QML 的文件夹对话框没有进入该目录只是单击选中那么 folder 属性获取不到这个文件夹

如图,单机选中 QtOnline 文件夹,并点击 【选择文件夹】按钮

此时打印 FolderDialog 的 folder 属性,不会出现 QtOnline ,除非双击进入这个目录

 

QtWidget 的 QFileDialog 就能正确的获取这个路径。 

测试代码:

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Dialogs 1.3 as QD
import Qt.labs.platform 1.1 as Labs

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

    Button {
        text: "open"
        onClicked: {
            dialog2.open()
        }
    }

    QD.FileDialog {
        id: dialog1
        selectFolder: true
        onAccepted: {
            console.log(dialog1.folder)
        }
    }

    Labs.FolderDialog {
        id: dialog2
        onAccepted: {
            console.log(dialog2.folder)
        }
    }
}

3、BusyIndicator 如果 running 绑定 visible,那么隐藏后第二次 visible 为 true 时不会显示出来

图一是第一次 visible,图二是第二次 visible。

BusyIndicator 内部使用了一个透明度动画,runing 的时候透明度为 1,停止时为 0。而在事件处理中,透明度为 0 时又会设置 visible 为 false。

T.BusyIndicator {
    contentItem: BusyIndicatorImpl {
        running: control.running
        opacity: control.running ? 1 : 0
        Behavior on opacity { OpacityAnimator { duration: 250 } }
    }
}
void QQuickDefaultBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data)
{
    QQuickItem::itemChange(change, data);
    switch (change) {
    case ItemOpacityHasChanged:
        if (qFuzzyIsNull(data.realValue))
            setVisible(false);
        break;
    case ItemVisibleHasChanged:
        update();
        break;
    default:
        break;
    }
}

可是即使我们调整透明度动画大于 0 ,仍然不能显示,那是因为源码用的 OpacityAnimator,只在开始和结束触发值改变的信号,而且就算指定了起止 from 和 to,最终也是在 0 和 1 变化。

不过,我们根本不需要设置 runing 为 false,因为源码中逻辑可能和我们想的不一样,我们只需要设置 visible 即可。

void QQuickDefaultBusyIndicator::setRunning(bool running)
{
    if (running)
        setVisible(true);
}

测试代码:

    Button {
        text: "pop"
        onClicked: pop.open()
    }
    Popup {
        id: pop
        contentItem: BusyIndicator {
            id: busy
            width: 80
            height: 80
            running: visible
        }
    }

三、其他

1、QImage 的数据默认至少 4 字节对齐

QImage 文档:https://doc.qt.io/qt-5.15/qimage.html

通过 bits() 返回的地址操作内部连续数据时,需要注意行对齐问题,可以通过 bytesPerLine() 获取每行字节数,也可以通过 scanLine(int i) 接口来逐行遍历。

2、QImage/QImageReader 加载修改了后缀名的图片

在旧版本中如果图片改了后缀名,QImage 可能无法正常加载,因为默认以后缀名来确认格式。可以通过 QImageReader 来读取,设置 decideFormatFromContent 为 true 后不以后缀判断格式:

    QImageReader reader(filepath);
    //setDecideFormatFromContent之前调用format会导致设置无效
    //qDebug()<<reader.format();
    reader.setDecideFormatFromContent(true);
    qDebug()<<reader.format();
    QImage img = reader.read();

在 Qt5.15 中,经测试默认可以正确加载修改了后缀的图片。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装并配置uwsgi(1)

今天分享的主题是安装并配置uwsgi。 假设我们‍‍腾讯云主机里面的整个后端的源码&#xff0c;包括运行环境都已经没有问题了&#xff0c; 我们要把这个给挂到我们的 uwsgi 的服务器上&#xff0c; 因为这个服务器它支持 uwsgi 的协议&#xff0c;它能够跟我们的Django的进行一…

Shell——echo、printf及彩色打印

文章目录printfprintf格式常用的转义字符echoecho打印的格式echo打印的三种方式echo支持的转义字符关于打印叹号&#xff08;!&#xff09;彩色输出printf printf格式 printf “格式化字符串” 变量 printf的使用方法与C语言一样&#xff0c;并且不需要括号和逗号进行分隔&…

【自学Python】Python诞生

Python诞生 Python诞生教程 1989 年的圣诞节期间&#xff0c;吉多范罗苏姆为了在阿姆斯特丹打发时间&#xff0c;决心开发一个新的解释程序&#xff0c;作为 ABC 语言的一种继承。 ABC 语言是由吉多参加设计的一种教学语言&#xff0c;就吉多本人看来&#xff0c;ABC 这种语…

如何使用 Java Stream API ,一行代码将 List 转换为 Map 类型

文章目录一句话场景语法测试关键语句截图Source Code控制台输出一句话 List<User> --> Map<User对象中欲作为key的字段的类型, User> List<User> userList getUserList(); Map<Integer, User> idAndUserMap userList.stream().collect(Collecto…

2022朝花夕拾-持续快速成长

2022年又过去了&#xff0c;学业繁忙好久没和大家聊天了。2020年终总结2020朝花夕拾-不务正业的大学生做了什么比赛&#xff1f;和2021年终总结2021朝花夕拾-我在校搞副业实现经济独立在此&#xff0c;幸好去年立了年度目标。如今在回忆这一年的收获时&#xff0c;也可以一项项…

通过SQLserver执行系统命令

前言 咋说呢&#xff0c;就是把&#xff0c;我最近找工作然后库库投校招的简历&#xff0c;然后呢&#xff0c;我接到了一个青藤云的笔试机会&#xff0c;哇&#xff01;我激动的不行&#xff0c;然后我什么都没有准备的上线进行一波答题&#xff0c;答完总结下来&#xff0c;…

使用python实现跨年烟花代码

朋友们&#xff0c;有多久没放烟花了&#xff1f;今年你所在的地方允许放烟花么&#xff1f;既然我们不能线下放&#xff0c;那么我们就在线上放个够吧&#xff08;还是那句话&#xff1a;你~有~对~象~了~嘛~&#xff09; 一下是动态图&#xff08;图片我使用的我上几次的背景图…

算法设计与分析复习02:分而治之算法

算法设计与分析复习02&#xff1a;分而治之算法 文章目录算法设计与分析复习02&#xff1a;分而治之算法复习重点分而治之算法全排列递归算法矩阵乘法的Strassen算法棋盘覆盖线性时间选择复习重点 分而治之算法 全排列递归算法 #include<vector> #include<iostream&g…

await如何优雅的捕获异常?

传统方式 try { const res await getUser(id) }catch(err){console.log(err) } await让我们使用异步方式开发的代码简便不少&#xff0c;但是每次使用如果都用try..catch来捕获异常反而埋没了它的优势。 [ err, user ] await to(UserModel.findById(1)); 如果我们使用await…

CSS var() 自定义的属性值和使用

声明全局 CSS 变量 :root{<自定义属性名>: <自定义属性值>; }自定义属性名必需以 -- 开头。 :root :root 这个 CSS 伪类匹配文档树的根元素。对于 HTML 来说&#xff0c;:root 表示 <html> 元素&#xff0c;除了优先级更高之外&#xff0c;与 html 选择器…

【Docker】构建自定义镜像

文章目录1. 镜像制作的两种方法2. Commit构建自定义镜像3. Dockerfile构建镜像4. 镜像的分层结构5. Dockerfile基础指令6. Java服务器镜像构建7. Nginx镜像构建8. Redis镜像构建9. 快速部署MySQL并初始化1. 镜像制作的两种方法 基于Docker Commit制作镜像基于Dockerfile制作镜…

WIKO+鸿蒙生态:海外品牌中国化的新范式

想要理解快速变化的科技行业&#xff0c;往往要锚定一些标杆型企业&#xff0c;它们的风吹草动&#xff0c;可能就是行业接下来的地动山摇。就像互联网绕不过BAT&#xff0c;手机行业的趋势也少不了鸿蒙的消息。最近&#xff0c;有一件鸿蒙生态的新闻是比较特别的。我们报道过很…

java反射基础

Java反射机制提供的功能 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型信息 在运行时调用任意一个对象的成员变量和方法 在运行时处理注解 生成动态代理 Java反射优点和缺点 优点: …

Linux free命令详解,Linux查看内存使用情况

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 free一、常用操作二、字段解释1、free和available的区别&#xff1f;2、交换分区的作用&#xff1f;三、内存使用情况分析技巧四、原理&…

人脸识别检测项目实战

文章目录 一、项目介绍 二、环境配置 三、项目知识储备 导入图片灰度转换 修改图片尺寸的大小矩形检测框图绘制 人脸检测识别 多个人脸检测效果对人脸视频进行检测数据集录入训练数据人脸识别过程 项目介绍 人脸识别在现代化中应用较为广泛&#xff0c;比如人脸考勤系统等&…

Python爬虫——Scrapy 的基本使用

Scrapy 框架中创建项目、查看配置信息&#xff0c;以及运行爬虫程序都是通过指令完成。 常用指令如下所示&#xff1a; 指令格式说明startprojectscrapy startproject <项目名>创建新项目genspiderscrapy genspider <爬虫文件名> <访问的域名>新建爬虫文件…

torchnet package (1)

torchnet torchnet用于torch的代码复用和模块化编程框架,主要包含四个类 Dataset: 以不同的方式对数据进行预处理.Engine: 训练/测试机器学习方法Meter评估方法性能Log日志. Documentation torchnet的调用 local tnt require ‘torchnet’ tnt.Dataset() torchnet提供了多…

VueJs中的reactive函数

前言一个基本类型的数据,想要变成响应式数据,那么需要通过ref函数包裹,而如果是一个对象的话,那么需要使用reactive函数reactive可将对象变成响应式将一个对象类型的数据变为响应式,如果是基本数据类型,那用refconst 代理对象 reactive(被代理对象)接收一个对象(或数组),返回一…

一个DevOps/SRE/运维的2022年碎碎语

人们常说&#xff1a;情商高的人会说话。实际上他们的意思是对人说人话&#xff0c;对鬼说鬼话&#xff0c;这样的人才有前途。很长时间里&#xff0c;我一直以为我无法理解他们为什么要推崇心口不一。后来&#xff0c;我知道了。我不是不理解。我只是不服气。这样的”不服气“…

box-shadow 高阶玩法:纯 CSS 画蒙娜丽莎和粒子星空

想必写过 CSS 的同学都用过 box-shadow&#xff0c;它可以给元素设置阴影&#xff0c;增加立体效果。 比如说这样&#xff1a; 但它能做的可不只是阴影&#xff0c;还可以用来做出很多有趣的效果&#xff1a; 比如画蒙娜丽莎&#xff1a; 画星空&#xff1a; 这些效果都是 bo…