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);
}

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

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

相关文章

基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 在现代社会…

计算机毕业设计项目基于SSM闪光点映像摄影工作室预约系统

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

人工智能大模型培训讲师叶梓:Llama Factory 微调模型实战分享提纲

LLaMA-Factory ——一个高效、易用的大模型训练与微调平台。它支持多种预训练模型&#xff0c;并且提供了丰富的训练算法&#xff0c;包括增量预训练、多模态指令监督微调、奖励模型训练等。 LLaMA-Factory的优势在于其简单易用的界面和强大的功能。用户可以在不编写任何代码的…

Creating Server TCP listening socket *:6379: bind: No error

启动redis报错&#xff1a;Creating Server TCP listening socket *:6379: bind: No error 解决方案&#xff1a; 1、直接在命令行中输入 redis-cli.exe 2、输入shutdown&#xff0c;关闭 3、输exit&#xff0c;退出 4、重新输入 redis-server.exe redis.windows.conf&…

qt QSettings详解

1、概述 QSettings是Qt框架中用于应用程序配置和持久化数据的一个类。它提供了一种便捷的方式来存储和读取应用程序的设置&#xff0c;如窗口大小、位置、用户偏好等。QSettings支持多种存储格式&#xff0c;包括INI文件、Windows注册表&#xff08;仅限Windows平台&#xff0…

Excel中日期格式“年月日 时间”修改为“年月日”

需求&#xff1a; 将Excel中“yyyy-mm-dd hh:mm:ss”格式的时间转换为“yyyy-mm-dd”格式的时间&#xff0c;选中转换后的时间时编辑栏中依然会显示“yyyy-mm-dd hh:mm:ss”格式。 方法一、在原数据列进行转换&#xff1a; 1、选中需要转换的数据列&#xff0c;右键--【设置…

解决Clang 18+不能链接GCC14编译的库的问题

前面笔者的博文MSYS2 MinGW64使用Protobuf新版本踩坑&#xff0c;有提到使用最新的Clang 19.1.4版本在MinGW下无法正常链接使用了Protobuf 28.3的项目&#xff0c;因为MinGW下的项目默认都是使用GCC来编译的&#xff0c;所以如果开发者使用Clang编译器&#xff0c;必然会出现链…

DHCP和DNS

DHCP&#xff08;动态主机配置协议&#xff09;和DNS&#xff08;域名系统&#xff09;是计算机网络中两个重要的协议&#xff0c;它们在网络的管理和使用中发挥着关键作用。 DHCP&#xff08;动态主机配置协议&#xff09; 基本功能 自动分配IP地址&#xff1a;DHCP允许网…

Unity 设计模式-策略模式(Strategy Pattern)详解

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;定义了一系列算法&#xff0c;并将每种算法封装到独立的类中&#xff0c;使得它们可以互相替换。策略模式让算法可以在不影响客户端的情况下独立变化&#xff0c;客户端通过与这些策略对象进…

C++远程调试vscode配置

C++远程调试vscode配置 一、环境说明二、安装gdbserver2.1 安装方案一2.2 安装方案二源码安装三、VSCode配置gdb远程调试一、环境说明 目标主机:ubuntu 22.04.02 -server(x86_64) 远程调试的主机。 宿主机:ubuntu 22.04.05 -desktop (x86_64) 自己控制的主机。 二、安装g…

【Vue】Scoped、组件间通信、Props检验

目录 Scoped 作用 *原理 组件通信 前置知识 什么是组件通信 为什么需要组件通信 如何进行组件通信 如何辨别两个组件的关系 父子组件通信 父传子 子传父 非父子组件通信 祖先传后代 语法 任意两个组件通信 步骤 Props校验 props是什么 作用 语法 组件的…

vue 一行显示的动态消息

动态消息上翻显示 效果图 特点&#xff1a; 重复的信息&#xff0c;只显示一次全部信息显示完后&#xff0c;只在轮播最后一个消息队列若最后一个消息队列只有一条信息&#xff0c;则停止轮播&#xff0c;不轮播新的消息队列进入后&#xff0c;触发新的轮播 <template&g…

使用Unity脚本模拟绳索、布料(碰撞)

效果演示&#xff1a; 脚本如下&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;namespace PhysicsLab {public class RopeSolver : MonoBehaviour {public Transform ParticlePrefab;public int Count 3;public int Space 1;…

基于Matlab BP神经网络的电力负荷预测模型研究与实现

随着电力系统的复杂性和规模的不断增长&#xff0c;准确的电力负荷预测对于电网的稳定性和运行效率至关重要。传统的负荷预测方法依赖于历史数据和简单的统计模型&#xff0c;但这些方法在处理非线性和动态变化的负荷数据时&#xff0c;表现出较大的局限性。近年来&#xff0c;…

MperReduce学习笔记下

自定义InputFormat合并小文件 案例需求 无论hdfs还是mapreduce&#xff0c;对于小文件都有损效率&#xff0c;实践中&#xff0c;又难免面临处理大量小文件的场景&#xff0c;此时&#xff0c;就需要有相应解决方案。 案例分析 小文件的优化无非以下几种方式&#xff1a; …

Visual Studio开发lua脚本环境搭建

在Visual Studio上开发lua脚本环境搭建 1、下载lua的jdk安装&#xff0c;以及环境变量配置 下载LuaForWindows_v5.1.5-52.exe安装&#xff0c; 安装好之后&#xff0c;检查是否路径自动。 下载地址&#xff1a; https://github.com/rjpcomputing/luaforwindows/releases (1…

Elasticsearch ILM 故障排除:常见问题及修复

作者&#xff1a;来自 Elastic Stef Nestor 大家好&#xff01;我们的 Elasticsearch 团队正在不断改进我们的索引生命周期管理 (index Lifecycle Management - ILM) 功能。当我第一次加入 Elastic Support 时&#xff0c;我通过我们的使用 ILM 实现自动滚动教程快速上手。在帮…

初步简单的理解什么是库,什么是静态库,什么是动态库

库是什么 库根据名字我们应该很容易理解&#xff0c;在我们日常生活种&#xff0c;包含库的东西有很多&#xff0c;像仓库&#xff0c;库房那些&#xff0c;库是拿来存放&#xff0c;方便管理东西的&#xff0c;在我们编程当中&#xff0c;库的定义也是如此 那么为什么要有库…

建筑行业数据分析如何做?

导读&#xff1a;在谈数字化转型之前&#xff0c;先来谈谈数据的价值。数字化转型的基础是数据&#xff0c;是数字化的基本的生产资料&#xff0c;数据的质量直接决定了数字化的能力、所能达到的深度和广度。目前做的数据可视化项目总感觉只是数据展现而已&#xff0c;而不达不…

服务器监控工具哪吒探针 v1 版本上线 全新设计带来新体验

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 上周黑五期间&#xff0c;哪吒探针进行了一次颇有争议的 Breaking Change 更新&#xff0c;将面板和 Agent 升级到了 v1 版本&#xff0c;并且与原来的 v0.x 版本完全不兼容。 同时&#xff0c;将 v0.x 的…