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| +--…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
