Qt开发技巧(二十二)设置QPA,打开记忆文件,清除表单页注意判断存在性,工程文件去重添加,按钮组的顺序设置,Qt的属性用来传值,查找问题的方法

继续记录一些Qt开发中的技巧操作:
1.设置QPA
平台抽象层,用以取代Qt for Embedded Linux以及Qt4中的平台接口。QPA插件通过定义QPlatform开头的一系列类的子类实现,其中有两个根类,QPlatformIntegration和QPlatformTheme,前者用于窗口系统的集成,后者用于更深层次的平台主题化和集成,QStyle不属于QPA。现在很多linux用wayland作为桌面显示,这样会出现一个问题,由于没有坐标系统,导致无边框窗体无法拖动和定位(一般是Qt6开始强制默认优先用wayland,之前Qt5是默认有xcb则优先用xcb),需要在main函数前面加一行 qputenv(“QT_QPA_PLATFORM”, “xcb”);还有其他选择比如“linuxfb”。看你的Linux嵌入式设备平台的支持情况了。
2.打开记忆文件
有时候导出文件后,希望直接打开文件管理器并选中刚才打开的文件,以便用户打开处理,需要通过执行命令来实现。

QString path = "file:///d:/test1.txt";
QProcess::startDetached("explorer.exe", QStringList() << "/select," << path);

3.清除表单页注意判断存在性
在QTreeWidget/QTableWidget的信号currentItemChanged中,执行对应的clear方法也会触发该信号,这就需要特别注意了,对应该信号的两个参数 current/previous 表示当前节点和上一个节点,两个参数的值都为空,所以在该信号对应槽参数处理中,必须先判断该值是否为空指针,不判断的话很可能导致程序崩溃。
4.工程文件去重添加
在qt的工程文件.pro中,我们常常要添加一些模块,比如“QT += core gui”,“QT+= network websockets”这里的 += 其实可以用 *= 更好,+= 表示添加,不会去重,而 *= 是去重添加,存在则不添加。建议用 *=,尽管 += 也能正常使用,毕竟多一个重复的不影响编译器识别,但这样就存在重复添加的可能。

QT += core gui
QT += core gui
message($$QT) //会打印 core gui core gui
QT *= core gui
QT *= core gui
message($$QT) //会打印 core gui
DEFINES *= abc
DEFINES *= abc
message($$DEFINES) //会打印 abc

5.按钮组的顺序设置
在使用QButtonGroup按钮组添加按钮的时候,如果需要使用buttonClicked(int)信号,则添加按钮的时候必须手动指定按钮编号,否则默认编号都是-1,这样在触发buttonClicked(int)的时候值是负数,导致和预期不一致,原本以为默认按照添加按钮的顺序自动递增设置索引,其实不是的,不会这样处理。务必记得指定按钮编号。

        QButtonGroup* btGroup = new QButtonGroup(this);connect(btnGroup, SIGNAL(buttonClicked(int)), ui->stackedWidget, SLOT(setCurrentIndex(int)));btGroup->addButton(ui->btWait1, 0);btGroup->addButton(ui->btWait2, 1);btGroup->addButton(ui->btWait3, 2;btGroup->addButton(ui->btWait4, 3);btGroup->addButton(ui->btWait5, 4);

6.Qt的属性用来传值
Qt的属性机制非常强大,除了可以用来控制样式表,也可以很方便的用来传值,比如qml中的值传递,有时候我们写了一个通用类,希望这个类可以做很多事情,但是又希望其中有一些特殊变量存取值,一种办法是直接定义私有变量,提供get/set接口函数,还有一种偷懒的办法就是用属性setProperty/property,然Qt内部从元对象数据层面自己管理,这样不用在类中写对应的变量和get/set函数。但是肯定有性能损耗,性能上肯定比变量低,所以要看具体的实际需求,如果不是非常频繁的调用setProperty/property,通用性优先的话,那用属性机制会更方便。推荐方式三,继承通用类,在子类中增加set/get。

void MainWindow::on_pushButton_clicked()
{QElapsedTimer timer;timer.start();for (int i = 0; i < 10000; ++i) {Test *t = new Test;//t->setId(i);//t->setName("test");t->getName();}qDebug() << "方式1" << timer.nsecsElapsed();
}
void MainWindow::on_pushButton_2_clicked()
{QElapsedTimer timer;timer.start();for (int i = 0; i < 10000; ++i) {Test *t = new Test;//t->setProperty("id", i);//t->setProperty("name", "test");t->property("name").toString();}
qDebug() << "方式2" << timer.nsecsElapsed();
}

7.查找问题的方法
很多时候项目越写越大,然后就可能遇到,明明之前很简单的一段代码,运行的好好的,就那么几行几十行,为何一旦加入到当前项目中,就不行了,百思不得其解。一般遇到这种情况,建议两种处理办法。
办法一:就是注释大法,根据需要,从可能出问题的点,一行一行的注释掉载入的功能模块,甚至有时候你得从main函数入口开始,将不相关的都注释掉,仔细检查运行流程,直到找出引起问题的代码模块。
办法二:就是单独写个最简单的有问题的可以直接编译运行的示例,化繁为简,这样查找问题速度快。往往你会发现,写完这个简单的你怀疑的有问题的代码后,运行是完全正常的,他自己就好了,此时你可以安心的去排查其他代码了。
但有时候,最痛苦的就是简单demo运行的没问题,引入到程序里就不行,就是一些关联模块,互相之间干扰引起,这时候两种方法都得结合着用了。

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

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

相关文章

学习笔记——MathType公式编号:右编号和随章节变化

1.如何在word文档中插入带有编号的公式&#xff1f; 步骤&#xff1a;(前提是已经安装mathtype) 2.MathType公式编号怎么随章节变化&#xff1f; 想要编号级数也随标题级数进行自动变化&#xff0c;则需要插入或修改文档的“分隔符” 步骤&#xff1a;

VS+QT开发 找不到宏$(Qt_INCLUDEPATH_) $(Qt_LIBS_)

问题&#xff1a;在VSQT开发环境&#xff0c;项目右键->属性->C/C->常规->附加包含目录->宏&#xff08;位置在右下角&#xff09;->右侧新弹出的属性框内搜索Qt_INCLUDEPATH_ 找不到的场景的解决办法。

STl学习-迭代器

1.迭代器种类 这五种迭代器的声明如下&#xff1a; truct output_iterator_tag {};//输出迭代器 truct input_iterator_tag{ };//输入迭代器 truct forward iterator tag : public input iterator tag {};//向前迭代器 truct bidirectional iterator tag :public forward iter…

亲测在Windows系统安装、使用、定制Ollama服务

一、前言 1.1 Ollama介绍 Ollama是一个专为在本地环境中运行和定制大型语言模型而设计的工具。它提供了一个简单而高效的接口&#xff0c;用于创建、运行和管理这些模型&#xff0c;同时还提供了一个丰富的预构建模型库&#xff0c;可以轻松集成到各种应用程序中。Ollama的目标…

aLoNg3x.2 | CrackMe

cm下载链接&#xff1a; https://n0zom1z0.lanzoup.com/iB4Gz2el88cb 密码:38sy crack目标是让register框去掉。不让patch&#xff0c;所以要真算出Code。 第一个难点&#xff1a; DELPHI。。。窗口文字与处理函数的定义在这种地方&#xff1a; 这个cancel处&#xff0c;只要…

STl学习-函数对象

1.含有状态的函数对象类 函数对象类除了 operator()之外也可以包含其他成员。函数对象类通常含有一些数据成员这些成员被用于定制调用运算符中的操作。举个例子&#xff0c;我们将定义一个打印 string 的类。默认情况下&#xff0c;会将内容写入到cout 中&#xff0c;每个stri…

U-Mail邮件网关有效防止企业邮箱系统被垃圾邮件轰炸

在现代社会&#xff0c;互联网企业为了提供更便捷的服务&#xff0c;常常会收集用户数据&#xff0c;构建自己的大数据资源库。然而&#xff0c;这种行为往往导致用户在不经意间泄露个人隐私&#xff0c;进而引发个人信息的非法交易和频繁的骚扰电话&#xff0c;这些问题已经引…

手把手教你搭建OpenScenario交通场景(上)

OpenScenario是一种专为自动驾驶系统仿真测试设计的场景描述语言&#xff0c;它基于XML格式&#xff0c;旨在提供一个标准化、模块化的框架&#xff0c;用于定义和重现复杂的道路交通场景。该语言不仅能够详细描绘车辆、行人、交通信号及其他动态交通参与者的行为模式&#xff…

专业140+总分430+复旦大学875信号与系统考研经验原957电子信息通信考研,真题,大纲,参考书。

专业140&#xff0c;总430&#xff0c;复旦大学875信号与系统&#xff08;电子信息&#xff09;原957经验贴分享&#xff0c;希望大家复习有帮助。 专业课&#xff08;875信号与系统含随机过程-原957&#xff09; 专业课这方面我是从7月开始&#xff0c;刚好数学第一遍搞好了大…

NVR小程序接入平台EasyNVR多品牌NVR管理工具/设备介绍

随着数字化浪潮的迅猛推进&#xff0c;视频监控技术在维护公共安全、提升管理效能方面发挥着越来越重要的作用。在众多视频监控平台中&#xff0c;NVR小程序接入平台EasyNVR是一款拓展性强、视频能力灵活且部署轻便的安防视频监控平台。它支持多种主流标准协议&#xff0c;并能…

C语言 | Leetcode 题解之第535题TinyURL的加密与解密

题目&#xff1a; 题解&#xff1a; typedef struct {int key;char *val;UT_hash_handle hh; } HashItem;HashItem *dataBase NULL;char* encode(char* longUrl) {srand(time(0));int key;HashItem * pEntry NULL;while (true) {key rand();pEntry NULL;HASH_FIND_INT(dat…

磁盘分区并挂载

https://blog.csdn.net/qq_45664055/article/details/107516419

投机采样的显性化——OpenAI新feature:Predicted Outputs

关于投机采样speculative decoding我就不特别详细解释了 我在这里简单描述一下 小模型生成了接下来的n个标记&#xff0c;然后在大模型上进行n个并行推理&#xff0c;具体为&#xff1a;Prompt&#xff0c;Prompt ST1&#xff0c;Prompt ST1 ST2 … Prompt ST1 ST2 … …

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测 目录 BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 …

有趣的Midjourney作品赏析(附提示词)

中文提示词&#xff1a;国风少年 C4D软件,高分辨率,超细节,超现实主义, 英文提示词&#xff1a;National Style Youth Cinema4D,high resolution,hyper detailed,surrealism, --niji 6 --ar 1:1 中文提示词&#xff1a;粘土模型&#xff0c;男性穿着中世纪欧洲蓝色盔甲&#x…

【保姆级教程】实操 Linux 磁盘管理:硬盘选型 分区挂载

最近&#xff0c;Linux 服务器自带的固态硬盘&#xff0c;空间告警&#xff0c;急需加上一块新的硬盘来救急。 今日分享&#xff0c;系统梳理下 Linux 下挂载磁盘的详细步骤和注意事项&#xff0c;方便日后翻阅&#xff0c;也给有类似需求的小伙伴一点帮助。 1. SSD&#xff…

离线安装nvidia docker2插件

由于网络问题&#xff0c;各位下载nvidia docker插件存在各种各样的问题&#xff0c;往往需要换源&#xff0c;或者其他途径外网解决&#xff0c;为了避免这么麻烦&#xff0c;可选择直接将包下载到本地&#xff0c;使用dpkg本地安装。 离线包下载地址&#xff0c;总共需要下载…

MySQL多表查询

扩展 upsert语法 原始数据 create table stu(id int primary key auto_increment,name varchar(20), #学生姓名gender varchar(10), #学生性别age int #学生姓名 ) default charsetutf8;insert into stu values(null,乔峰, 男 ,28),(null,虚竹, 男 ,25),(n…

让智能体—“正念365”陪你一起“养心”

佛学的“八正道”中&#xff0c;笔者个人观点&#xff0c;“正念”是最适合当代人低门槛练习的一个&#xff0c;因为不需要阅读大量的知识来理解概念&#xff0c;只需要保持对当下的觉察&#xff0c;发现分心了&#xff0c;就不带评价的把注意力拉回到当前的事情上就好。就是佛…

uni-app小程序开发(1)

下载软件就不多赘述了。 直接上代码&#xff0c;写过wep端的vue看这个小程序就简单很多&#xff0c;不需要搞那么多麻烦事情&#xff0c;直接编译器就创建好了基础模版。 1、项目结构 暂时知道这么多&#xff0c;后续再补充 2、页面创建、导航栏设置、基础属性设置 在pages中…