Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象
继续记录一些Qt开发中的技巧操作:
1.滚动部件的滑动问题
再Linux嵌入式设备上,有时候一个页面的子部件太多,一屏放不下是需要做页面滑动,可以使用“QScrollArea”控件,拖来一个“QScrollArea”控件,将子部件放置在“QScrollArea”自带的“scrollAreaWidgetContents”中。这样就可以拖动了么,实际不行,还需要专门设置滑动:
//设置滑动ui->scrollArea->verticalScrollBar()->style()->polish(ui->scrollArea->verticalScrollBar());QScroller::ScrollerGestureType gesture = QScroller::LeftMouseButtonGesture;QScroller::scroller(ui->scrollArea)->grabGesture(ui->scrollArea, gesture);ui->scrollArea->verticalScrollBar()->setValue(0);
或者这样写:
QScroller *scroller = QScroller::scroller(ui->scrollAreaUpper->viewport());scroller->grabGesture(ui->scrollAreaUpper->viewport(), QScroller::LeftMouseButtonGesture);
这样就可以随着手指滑动了。
但有时候会遇到划不动的情况,仔细看父窗口有QScrollArea部件,这个父窗口会弹出个子窗口,子窗口里边也有QScrollArea部件,你就会发现父窗口可以滑动,但子窗口不能滑动。这是由于两个QScrollArea部件都设置了“QScroller::LeftMouseButtonGesture”,你只需将其中一个改为“QScroller::TouchGesture”类型就互不影响了。
2.Qt设置时区问题
在一些跨国项目中,经常会碰到时区问题。设备上显示“14:00:00”,时间传到后台,后台显示“18:00:00”,这是由于设备和后台使用不同的时区对时间戳进行转换造成的。Qt中,有专门处理时间和时区的函数。
// 获取当前时间QTime time = QTime::currentTime(); //判断是否有效的时间bool valid = time.isValid(); // 返回false// 增加1小时time = time.addSecs(3600); // 增加1秒time = time.addMSecs(1000); QTime startTime(12, 0, 0); // 12:00:00// 计算两个时间之间的秒数差值int diff = startTime.secsTo(time); //检测时间段QTime timer;timer.start();// 第一段代码,restart开始int elapsed1 = timer.restart();// 第二段代码,elapsed结束int elapsed2 = timer.elapsed();//获取当前日期时间QDateTime datetime = QDateTime::currentDateTime();//时间转字符串QString strReportTime = datetime.toString("yyyy/MM/dd hh:mm:ss");QDateTime datetime2;//字符串转时间datetime2.fromString(strReportTime , "yyyy/MM/dd hh:mm:ss");//设置时区datetime.setTimeZone(QTimeZone("Asia/Shanghai"));QString timeString = datetime.toString(Qt::ISODate);//更新时区信息QTimeZonePrivate::instance()->updateZoneInfo(QDir("/usr/share/zoneinfo"));//获取以0时区为基准的日期时间QDateTime utcTime = QDateTime::currentDateTimeUtc();QDateTime localTime = utcTime.toLocalTime();logger()->info() << __FUNCTION__ << "UTC time: " << utcTime.toString(Qt::ISODate);logger()->info() << __FUNCTION__ << "Local time: " << localTime.toString(Qt::ISODate);
3.自定义窗体样式不生效问题
我们在开发过程中,经常需要自定义一些继承自QWidget的窗体,作为其他窗体的组件胡总和子窗体,这时候,你会发现在设计器中,设置的自定义窗体自身的样式,无法生效,设置的背景,颜色什么的,都没有表现出来,这是由于继承自QWidget的自定义窗体的样式不能再使用设计器里边的样式设置,而需要以读文件的形式来设置窗体样式。如下:
//自定义的窗体可以设置内部子部件样式,但没法直接设置自身样式,必须要通过读文件的形式this->setAttribute(Qt::WA_StyledBackground);QFile qss(":/qss/qssStyle/FormStyle.qss");if (qss.open(QFile::ReadOnly)){QString style = QLatin1String(qss.readAll());this->setStyleSheet(style);qss.close();}
当然,你也可以让自定义窗体改为继承自QFrame,因为QFrame自带paintEvent函数已做了实现,在使用样式表时会进行解析和绘制。
4.编码格式问题
有时候我们代码中包含中文时,会经常遇到下面这些报错,其实有指向性的就是“C2001:常量中有换行符”,你可以网上去查找,这是由于编码格式引起的,程序中有对中文编码格式处理,而文件格式不是中文格式。

解决方案考虑下面几种,可以依次尝试:
(1).“QT界面菜单栏->工具->选项->文本编辑器,修改成如果编码是UTF-8则添加”

(2)“QT界面菜单栏->编辑->Slect Encoding…->UTF-8->按编码保存”,进行修改。

(3)在头文件加上UTF-8的配置:“#pragma execution_character_set(“utf-8”)”

(4)在工程文件(.pro)中加上一下配置代码(这种一般是由于MSVC编译,而源代码文件是无BOM的utf-8编码格式)
msvc{QMAKE_CFLAGS += /utf-8QMAKE_CXXFLAGS += /utf-8
}

5.标签文字对齐无效果
使用QLabel标签时,如果在样式表中直接写文字的对齐方式,“text-align: left center;”不管你是写右对齐还是居中对齐,都会以默认的左对齐显示,毫无效果。这就需要在设计器里直接指定对齐方式,或者使用代码的形式设置对齐方式。
label->setAlignment(Qt::AlignCenter);
或者

6.给按钮左边加个图
像下面这个,给返回按钮的左边加一个表示返回的图片呢?

使用样式表是个不错的方式,当然你也可以用其他方式,甚至可以自定义个按钮部件来实现。
QPushButton#btUpdateBack{/*图片*/background-image: url(:/image/Image/back-top.png);background-repeat: no-repeat;background-origin: padding;/*重点:在指定的位置放图片*/background-position: left center;/*重点:内边距推50px刚好放下图片*/padding-left:50px;color: rgba(66, 66, 66, 1);font: bold normal 40px "Source Han Sans CN";background-color: transparent;border-color: transparent;outline: none;text-align: left center;
}
7.最小化后的卡死假象
有时候执行最小化,然后重新恢复时,发现界面可能会出现好像卡死的情况,可以重写showEvent事件,并加上“setAttribute(Qt::WA_Mapped);”以避免。
void showEvent(QShowEvent *e)
{if(event->type() == QEvent::WindowStateChange) { if(!isMinimized()) { setAttribute(Qt::WA_Mapped); } }QWidget::showEvent(e);
}
相关文章:
Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象
继续记录一些Qt开发中的技巧操作: 1.滚动部件的滑动问题 再Linux嵌入式设备上,有时候一个页面的子部件太多,一屏放不下是需要做页面滑动,可以使用“QScrollArea”控件,拖来一个“QScrollArea”控件,将子部件…...
SHELL----正则表达式
一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下: -i 忽略大小写 -c 统计匹配的行数 -v 取反,不显示匹配的行 -w 匹配单词 -E 等价于 egrep ,即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…...
44.5.【C语言】辨析“数组指针”和“指针数组”
目录 1.数组指针 2.指针数组 执行结果 底层分析 1.数组指针 从语文的角度理解,"数组"修饰"指针".因此数组指针是指针 例如以下代码 #include <stdio.h> int main() {char a[5] { "ABCDE" };return 0;} 其中a就是数组指针,因为数…...
node.js基础学习-express框架-路由及中间件(十)
一、前言 Express 是一个简洁、灵活的 Node.js Web 应用框架。它基于 Node.js 的内置 HTTP 模块构建,提供了一系列用于构建 Web 应用程序和 API 的功能,使开发者能够更高效地处理 HTTP 请求和响应,专注于业务逻辑的实现。 其特点包括简单易用…...
使用MSYS搭建linux开发环境踩坑笔记
前言: 使用linux系统或虚拟机进行嵌入式linux开发是常规方法; 使用MSYS是用于尝鲜和研究。 由于windows和linux的差异,使用MSYS代替Linux虚拟机会遇到很多坑。 主要原因在于: 1. windows和linux文件系统的差异:win不…...
vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。
需求: 上传文件时,展示进度条实时更新: 下面是代码片段: <!-- 添加媒体弹窗 -- 上传 --><el-dialog v-model"centerDialogVisible" title"媒体信息" width"700" :close-on-click-modal"false&qu…...
AspNet WebAPI 模型绑定问题
继承System.Web.Http.ApiController的Action的Model如果被[Serializable]定义,会导致Model的字段无法绑定。 Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll [Serializable] public class Model {public string id { get; set; } }public MyA…...
Android 图形系统之七:SurfaceFlinger
一. 引言 什么是 SurfaceFlinger?SurfaceFlinger 的核心作用和地位?为什么需要了解 SurfaceFlinger? 二. SurfaceFlinger 的基本概念 Surface 和 SurfaceFlinger 的关系SurfaceFlinger 与图形渲染(OpenGL ES 和 Vulkan…...
14、鸿蒙学习——管理通知角标
针对未读的通知,系统提供了角标设置接口,将未读通知个数显示在桌面图标的右上角角标上。 通知增加时,角标上显示的未读通知个数需要增加。 通知被查看后,角标上显示的未读通知个数需要减少,没有未读通知时࿰…...
TongRDS分布式内存数据缓存中间件
命令 优势 支持高达10亿级的数据缓冲,内存优化管理,避免GC性能劣化。 高并发系统设计,可充分利用多CPU资源实现并行处理。 数据采用key-value多索引方式存储,字段类型和长度可配置。 支持多台服务并行运行,服务之间可互…...
[在线实验]-RabbitMQ镜像的下载与部署
镜像下载 docker的rabbitmq镜像资源-CSDN文库 加载镜像 docker load --input rabbitmq.tar 给镜像打标签 这里发现镜像名为none,需要给镜像重命名下 docker tag [镜像id] [新镜像名称]:[新镜像标签] docker tag ebaf409ffbe2 rabbitmq:management 运行镜像…...
Linux 系统文件描述符(File Descriptor)小白级介绍
1. 概述 Linux 遵循"一切皆文件"的理念。在 Linux 系统中,文件描述符是一个索引值(非负整数),指向内核为每个进程所维护的该进程打开文件的记录表。 如上所述,每个进程都维护着一张文件描述符表。 文件描述…...
【Verilog】实验二 数据选择器的设计与vivado集成开发环境
目录 一、实验目的 二、实验环境 三、实验任务 四、实验原理 五、实验步骤 top.v mux2_1.v 一、实验目的 1. 掌握数据选择器的工作原理和逻辑功能。 2. 熟悉vivado集成开发环境。 3. 熟悉vivado中进行开发设计的流程。 二、实验环境 1. 装有vivado的计算机。 2. Sw…...
IDL学习笔记(三)OMI数据处理。hdf5文件读取,图像反转,GeoTiff区别,月季年均值计算提取输出,单位转换,运行时间计算
modis Level 2 grid 数据是全球格网化数据。一天的数据全在其中。 modis Level 1 和 2 数据是一景一景的影像。 IDL学习笔记(三)OMI数据处理 hdf5文件读取单位转换,输出hdf5数据集的图像,并检查图像经纬度是否正确,若错…...
深入浅出:PHP中的数据类型全解析
文章目录 引言理解数据类型标量类型整数 (integer)浮点数 (float)布尔值 (boolean)字符串 (string) 复合类型数组 (array)对象 (object)资源 (resource)NULL 特殊类型Callable强制类型转换 实战案例总结与展望参考资料 引言 在编程的世界里,数据类型是构建任何应用…...
要使用 OpenResty 创建一个接口,返回客户端的 IP 地址,并以 JSON 格式输出
要使用 OpenResty 创建一个接口,返回客户端的 IP 地址,并以 JSON 格式输出 要使用 OpenResty 创建一个接口,返回客户端的 IP 地址,并以 JSON 格式输出方案一解决方案(openresty使用cjson)说明:使…...
智慧油客:从初识、再识OceanBase,到全栈上线
今天,我们邀请了智慧油客的研发总监黄普友,为我们讲述智慧油客与 OceanBase 初识、熟悉和结缘的故事。 智慧油客自2016年诞生以来,秉持新零售的思维,成功从过去二十年间以“以销售产品为中心”的传统思维模式,转向“以…...
ClickHouse守护进程
背景描述 维护CK过程中,有时候会有CK OOM,并且CK自己没有自动拉起的情况出现;那么这个时候就需要守护进程,最初我不说了Supervisor来做守护进程,但是当我手动kill的时候发现并没有自动拉起。 解决方案 于是乎自己写…...
智能合约
06-智能合约 0 啥是智能合约? 定义 智能合约,又称加密合约,在一定条件下可直接控制数字货币或资产在各方之间转移的一种计算机程序。 角色 区块链网络可视为一个分布式存储服务,因为它存储了所有交易和智能合约的状态 智能合约还…...
SQL面试题——拼多多SQL面试题 求连续段的起始位置和结束位置
拼多多SQL面试题 求连续段的起始位置和结束位置 今天的题目来自拼多多,我们先看一下题目描述 有一张表ids记录了id,id不重复,但是会存在间断,求出连续段的开始位置和结束位置 +---+ | id| +---+ | 1| | 2| | 3| | 5| | 6| | 8| | 10| | 12| | 13| | 14| | 15| +--…...
Jable视频下载工具:高效解决方案与专业使用指南
Jable视频下载工具:高效解决方案与专业使用指南 【免费下载链接】jable-download 方便下载jable的小工具 项目地址: https://gitcode.com/gh_mirrors/ja/jable-download 问题诊断:视频下载的四大核心挑战 技术门槛障碍 传统视频下载工具往往需要…...
新零售系统开发的关键要素
新零售系统开发需要整合线上线下资源,实现数据驱动的智能化运营。以下是核心开发要点:技术架构设计采用微服务架构实现系统模块化,支持高并发场景。前端可选用React/Vue构建跨平台应用,后端推荐Spring Cloud或Node.js。数据库根据…...
大学物理电磁场公式
1,毕奥-萨伐尔定律 2,安培定律(电流连续性) 3,库伦定律 如果两个电荷电量为q1和q2,距离为r,它们受到相互间作用力F 同种电荷互相吸引,不同电荷相互排斥; 电荷作用力大小与电荷大小成正比,与距离平方成反比; 作用力方向与电荷连线方向相反或一致 4,法拉第定律 5…...
解决AMD显卡CUDA兼容性问题:ZLUDA技术实现与应用指南
解决AMD显卡CUDA兼容性问题:ZLUDA技术实现与应用指南 【免费下载链接】ZLUDA CUDA on AMD GPUs 项目地址: https://gitcode.com/gh_mirrors/zlu/ZLUDA 一、问题:AMD显卡的CUDA生态困境 1.1 硬件与软件的生态鸿沟 CUDA作为NVIDIA构建的专有计算平…...
【后端】主流后端语言横向对比:JAVA、C、C++、GO、PYTHON的实战应用与选型指南
1. 五种主流后端语言的核心特性对比 第一次接触后端开发时,面对众多编程语言的选择确实容易犯难。我至今记得2013年参与电商系统重构时,团队为选择Java还是Go争论了两周。这五种语言就像不同的工具——没有绝对的好坏,关键要看用在什么场景。…...
快速原型:用快马一键生成win11右键菜单传统样式恢复工具
快速原型:用快马一键生成win11右键菜单传统样式恢复工具 最近升级到Windows 11后,最让我不习惯的就是那个右键菜单了。新版的设计把所有选项都折叠起来,每次想找个功能还得点"显示更多选项",效率大打折扣。作为一个习惯…...
FastAPI 2.0流式响应性能翻倍的4个隐藏配置:uvloop优化、httpx异步客户端复用、response_model_exclude_unset调优、asyncpg连接池预热
第一章:FastAPI 2.0流式响应性能翻倍的全景认知FastAPI 2.0 引入了原生异步流式响应(StreamingResponse)的底层重构,通过移除中间层缓冲、直接对接 ASGI 服务器的 send 协议,并支持零拷贝字节流分块推送,显…...
microeco工具SpiecEasi网络分析功能的高效使用
microeco工具SpiecEasi网络分析功能的高效使用 【免费下载链接】microeco An R package for data analysis in microbial community ecology 项目地址: https://gitcode.com/gh_mirrors/mi/microeco microeco是一个用于微生物群落生态学数据分析的R语言工具包࿰…...
保姆级教程:在Ubuntu 20.04上搞定Isaac Gym Preview 4和强化学习环境(含常见libpython报错解决)
保姆级教程:在Ubuntu 20.04上搞定Isaac Gym Preview 4和强化学习环境(含常见libpython报错解决) 刚接触Isaac Gym的机器人/强化学习新手,往往会在环境配置阶段遇到各种依赖问题。本文将提供一个从零开始的详细安装指南,…...
Axure RP中文界面终极配置指南:从新手到专家的高效本地化方案
Axure RP中文界面终极配置指南:从新手到专家的高效本地化方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn Axure …...
