Qt应用开发常用功能
Qt判断当前操作系统?
#ifdef Q_OS_MAC //mac
...
#endif#ifdef Q_OS_LINUX //linux
...
#endif#ifdef Q_OS_WIN32 //win
...
#endif#ifdef __arm__ //arm
...
#endif
Qt实现应用程序关闭和重启?
//关机按钮-点击槽函数
void SystemD::on_shutdownButton_clicked()
{//关闭应用程序QCoreApplication::exit();
}//重启按钮-点击槽函数
void SystemD::on_rebootButton_clicked()
{//重启应用程序qApp->quit();QProcess::startDetached(qApp->applicationFilePath(), QStringList());
}
Qt实现Linux下的系统关机和重启?
先使Linux的普通用户可以在不输入密码的情况下,执行sudo reboot命令实现重启。
//关机按钮-点击槽函数
void SystemD::on_shutdownButton_clicked()
{QProcess::execute("sudo halt"); //UBuntu下执行关机命令(需要root权限)
}//重启按钮-点击槽函数
void SystemD::on_rebootButton_clicked()
{QProcess::execute("sudo reboot"); //UBuntu下执行重启命令(需要root权限)
}
Qt 实现Windows系统关机
第一种关机方法
#include <Windows.h>
#include <QProcess>void ShutDown()
{QString program = "C:/WINDOWS/system32/shutdown.exe";QStringList arguments;arguments << "-s";QProcess *myProcess = new QProcess();myProcess->start(program, arguments);
}
第二种关机方法
#include <Windows.h>void ShutDown()
{system("shutdown -s -t 00");
}
重启指令:shutdown -r -t xx
注销指令:shutdown -l -t xx
让Qt 程序休眠一段时间的方法
在Qt程序中,我们有时候会遇到这样的需求,比如让程序暂停(休息、休眠)一段时间。这里介绍以下几种方法:
一、阻塞型延时
阻塞的原理就是:在延时期间,本线程的事件循环得不到执行。
1、QThread类的sleep()
最简单的延时方法就是使用QThread类的sleep(n)、msleep(n)、usleep(n),这几个函数的不良后果就是,GUI会在延时的时间段内失去响应,界面卡死,所以,这三个函数一般只用在非GUI线程中。
QThread::sleep(5000);
2、使用定时器:死等
QTime timer = QTime::currentTime().addMSecs(5000);
while( QTime::currentTime() < timer ); //等待时间流逝5秒钟
这样做会存在一个问题,当在死循环的时候,我们的界面是无法刷新,用户是不会响应用户的任何交互的。也就是让用户感觉程序已经是假死状态了。
二、非阻塞延时
原理无非就是利用事件循环,有两种原理:
1、处理本线程的事件循环
在等待中,不断强制进入当前线程的事件循环,这样可以把堵塞的事件都处理掉,从而避免程序卡死。
QTime timer = QTime::currentTime().addMSecs(5000);
while( QTime::currentTime() < timer );QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);这条语句能够使程序在while等待期间,去处理一下本线程的事件循环,处理事件循环最多100ms必须返回本语句,如果提前处理完毕,则立即返回这条语句。这也就导致了该Delay_MSec函数的定时误差可能高达100ms。
2、使用子事件循环
创建子事件循环,在子事件循环中,父事件循环仍然是可以执行的。
QEventLoop eventloop;
QTimer::singleShot(5000, &eventloop, SLOT(quit())); //创建单次定时器,槽函数为事件循环的退出函数
eventloop.exec(); //事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出
Qt实现右键菜单
// 初始化动作
QAction *newAction = new QAction("新建",this);
// 初始化右键菜单
QMenu *rightClickMenu = new QMenu(this);
// 动作添加到右键菜单
rightClickMenu->addAction(newAction);
rightClickMenu->addSeparator();
rightClickMenu->addAction(ui->exitAction);
// 给动作设置信号槽
connect(ui->exitAction, &QAction::triggered, this, &MainWindow::on_exitAction_triggered);// 给控件设置上下文菜单策略:鼠标右键点击控件时会发送一个void QWidget::customContextMenuRequested(const QPoint &pos)信号
this->setContextMenuPolicy(Qt::CustomContextMenu);
Qt绑定回车键和确定按钮
输完密码在密码框按回车等同按了确定按钮的效果:
connect(m_pEditPasswd, SIGNAL(returnPressed()), this, SLOT(EnterSlot()));
注意:回车键同是包含键盘区的回车键和小键盘区的回车键。
Qt打开文件与保存文件
// 打开文件
QString fileName;
fileName = QFileDialog::getOpenFileName(this,"Open File","","Text File(*.txt)");
if(fileName == "")
{return;
}
else
{QFile file(fileName);if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){QMessageBox::warning(this,"error","open file error!");return;}else{if(!file.isReadable())QMessageBox::warning(this,"error","this file is not readable!");else{QTextStream textStream(&file);while(!textStream.atEnd()){ui->textEdit->setPlainText(textStream.readAll());}ui->textEdit->show();file.close();flag_isOpen = 1;Last_FileName = fileName;}}
}// 保存文件
QFileDialog fileDialog;
QString fileName = fileDialog.getSaveFileName(this, "save file", "", "Text File(*.txt)");
if(fileName == "")
{return;
}
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{QMessageBox::warning(this,"error","Open File Faile");return;
}
else
{QTextStream textString(&file);QString str = ui->textEdit->toPlainText();textString << str;Last_FileContent = str;file.close();
}
Qt实现截屏并保存
// 检查截图目录是否存在,若不存在则新建
QString strDir = QCoreApplication::applicationDirPath() + "/screenshot";
QDir dir;
if (!dir.exists(strDir))
{if(!dir.mkpath(strDir))QMessageBox::information(this, "Error", "新建截图目录失败!", QMessageBox::Ok);
}// 截图并保存
QPixmap pix = this->grab(QRect(0,0,this->width(),this->height()));
QString fileName= QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss") + ".png";//通过时间命名文件
if(!pix.save(QCoreApplication::applicationDirPath() + "/screenshot/" + fileName, "png"))
{QMessageBox::information(this, "Error", "保存错误 !", QMessageBox::Ok);
}
else
{QMessageBox::information(this, "Grab", "截图已保存在:安装目录\\Screenshot目录下!", QMessageBox::Ok);
}
QtCreator 屏蔽指定警告
有两种方法可以屏蔽指定警告。
方法一:
Tools > Options > C++ > Code Model > Clang Code Model > Manage;
创建自己的配置,这里可以复制一份原来的配置 “Clang-only checks for almost everything (Copy)” ;
在Clang中添加要屏蔽的警告, 例如: -Wno-old-style-cast、-Wno-deprecated-declarations;
确定后选择刚刚创建的自己的配置。
方法二:
使用如下语句:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"//这里写出现警告的代码就能实现去除警告(代码写在这中间)#pragma clang diagnostic pop
Qt 通过 objectName 查找该控件
在代码中,动态创建的一些控件,先通过 setObjectName(“XXX”),然后再通过 findChild 方法查找该控件:
QLabel *macLabel = new QLabel(this);
macLabel->setObjectName("mac");//查找这个控件的时候
QLabel *macLabel = yourWidget->findChild<QLabel*>("mac");
qDebug() << macLabel->text();
Qt模拟鼠标点击事件
通过坐标模拟鼠标事件点击事件。
关键函数:QWidget::childAt(pos);
其中 pos 是相对于 QWidget 的坐标,坐标一般有两种:全局坐标和相对坐标。通过 mapToGlobal() 之类的 API 可以转换。
QWidget* child = this->childAt(pos);
QMouseEvent *pressEvent, *releaseEvent;
pressEvent = new QMouseEvent(QEvent::MouseButtonPress, QPoint(0, 0), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
releaseEvent = new QMouseEvent(QEvent::MouseButtonRelease, QPoint(0, 0), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QApplication::sendEvent(child, pressEvent);
QApplication::sendEvent(child, releaseEvent);
通过以上代码,在 this 指向窗口的 pos 位置的控件(一般是 QPushButton)会接收到 clicked() 事件。
// 模拟鼠标点击的第二种方法
QTest::mouseClick(child, Qt::LeftButton, Qt::NoModifier, QPoint(0, 0));// 发送事件的第二种方法
QCoreApplication::postEvent(child, pressEvent);
QCoreApplication::postEvent(child, releaseEvent);// 获取当前的焦点widget
QWidget* focus = QWidget::focusWidget();相关文章:
Qt应用开发常用功能
Qt判断当前操作系统? #ifdef Q_OS_MAC //mac ... #endif#ifdef Q_OS_LINUX //linux ... #endif#ifdef Q_OS_WIN32 //win ... #endif#ifdef __arm__ //arm ... #endifQt实现应用程序关闭和重启? //关机按钮-点击槽函数 void SystemD::on_shutdownButton…...
麻了,部门新来的00后给我卷崩溃了...
今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…...
代码随想录算法训练营第56天|583. 两个字符串的删除操作,72. 编辑距离
代码随想录算法训练营第56天|583. 两个字符串的删除操作,72. 编辑距离 583. 两个字符串的删除操作72. 编辑距离 583. 两个字符串的删除操作 题目链接:583. 两个字符串的删除操作,难度:中等 【实现代码】 class Solution { publi…...
【嵌入式笔/面试】嵌入式软件基础题和真题总结——操作系统
在学习的时候找到几个十分好的工程和个人博客,先码一下,内容都摘自其中,有些重难点做了补充! 才鲸 / 嵌入式软件笔试题汇总 嵌入式与Linux那些事 阿秀的学习笔记 小林coding 百问网linux 嵌入式软件面试合集 2022年春招实习十四面…...
2023浙江省赛“信息安全管理与评估“--Web渗透测试(高职组)
2022全国职业技能大赛“信息安全管理与评估”(高职组)任务书 2022全国职业技能大赛“信息安全管理与评估”任务书第一阶段竞赛项目试题第二阶段竞赛项目试题第三阶段竞赛项目试题任务2:Web渗透测试2022全国职业技能大赛“信息安全管理与评估”任务书 第一阶段竞赛项目试题 …...
垃圾收集器面试总结(二)
G1 收集器 G1 (Garbage-First) 是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器。 以极高概率满足 GC 停顿时间要求的同时,还具备高吞吐量性能特征。 被视为 JDK1.7 中 HotSpot 虚拟机的一个重要进化特征。它具备以下特点: 并行与并发&am…...
语音交友app开发中的用户积分系统
引言 在当今数字时代,语音交友app已成为一种流行的社交工具。它们给用户提供了一个平台,在这里他们可以结交新朋友,分享他们的生活和信仰,并建立深厚的人际关系。然而,市场上存在大量的语音交友app,这使得…...
Nature:惊人的突破!科学家们成功破译人类嗅觉感应机制的奥秘!
加州大学旧金山分校(UCSF)的科学家们创造了第一张关于气味分子如何激活人类气味受体的分子水平的3D图片,这是破译嗅觉的关键一步,该成果打破了长期以来研究人员对嗅觉理解的僵局。 该研究成果于2023年3月15日发表在《Nature》&…...
WPF教程(九)--数据绑定(2)--绑定模式
一、绑定模式 绑定模式以及模式的使用效果。 示例如下是根据ListBox中的选中项,去改变TextBlock的背景色。将 TextBlock 的背景色绑定到在 ListBox 中选择的颜色。在下面的代码中针对TextBlock的 Background 属性使用绑定语法绑定从 ListBox 中选择的值。代码如下。…...
湿法冶金以及铼提取工艺,湿法冶金工艺特点及工艺流程
湿法冶金是利用浸出剂在一定温度压力下与矿石接触,把矿石中有用的金属溶解后再从溶液中回收有价金属的一种工艺,因为其过程大都是在水溶液中进行,所以又被称为“水法冶金”。 01 湿法冶金工艺特点及工艺流程 湿法冶金作为解决我国金属矿产资…...
kafka集群搭建
1.本次搭建涉及3台centos7主机,防火墙与selinux服务均关闭 2.主机参数如下表所示 nameIPportserviceA10.1.60.1122128、2888、3888、9092kafka、zookeeperB10.1.60.1142128、2888、3888、9092kafka、zookeeperC10.1.60.1152128、2888、3888、9092kafka、zookeeper…...
【UE】将存档的值显示在控件蓝图上
上一篇博客(【UE】保存游戏的demo)已经实现了存档功能,本篇博客介绍的是如何将存档的值显示在控件蓝图上。 效果 可以看到我们存档的值显示在文本控件上 步骤 1. 新建一个蓝图类,父类为“HUD” 命名为“NewHudClassBP” 2. 在世…...
考研数据结构代码篇
文章目录 数据结构线性表基本操作顺序表的定义顺序表基本操作 单纯上传一下数据结构中可能考察的代码,规格很乱,过几天改规格,提前水一篇 数据结构 线性表 基本操作 InitList(&L) // 初始化表。构造一个空的线性表L࿰…...
css-设置单行文本溢出省略号,使用overflow:hidden属性之后的出现的问题几解决办法。
1 设置单行文本溢出后出现省略号 必要:需要设置固定宽度,不允许换行 width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; 2 设置N行文本…...
js的方法
字符串方法: substring(startIndex, endIndex):从指定的字符串中提取字符并返回新字符串,不包括结束位置的字符。substr(startIndex, length):从指定字符串中提取指定长度的字符并返回新字符串。indexOf(searchValue, startIndex…...
[NSSRound#11] 密码学个人赛
这个比赛没有参加,跟别人要了些数据跑一下,其实交互这东西基本上一样,跑通就行. ez_enc 这题有点骗人,给了一堆AB串,一开始以为是培根密码,结果出来很乱.再看长度:192 应该就是01替换 a ABAABBBAABABAABBABABAABBABAAAABBABABABAAABAAABBAABBBBABBABBABBABABABAABBAABBABAA…...
玩转树莓派四、修改国内源提高更新速度
树莓派的软件包源默认连接的是官方源,速度不是很快,我们可以更换为第三方源以提高下载速度和体验。 首先通过命令 lsb_release -a 获取到版本号为 bullseye piRpi4B2G:/etc/apt $ lsb_release -a No LSB modules are available. Distributor ID: Debian Descripti…...
苹果手机网速慢怎么办?这些方法帮你解决网速慢的问题!
案例:苹果手机数据网络信号差,怎么解决? 【家人们,苹果手机不知咋回事,网速很慢,想要在某宝买个东西都得卡个半天。哭了!有没有什么方法解决?】 苹果手机作为一款高端智能手机&…...
linux_时序竞态-pause函数-sigsuspend函数-异步I/O-可重入函数-不可重入函数
接上一篇:linux_信号捕捉-signal函数-sigaction函数-sigaction结构体 今天来分享时序竞态的知识,关于时序竞态的问题,肯定会和cpu有关,也会学习两个函数,pause函数,sigsuspend函数, 也会分享什么…...
Tomcat的负载均衡和动静分离
---------------------NginxTomcat负载均衡、动静分离------------------------- Nginx 服务器:192.168.80.10:80 Tomcat服务器1:192.168.80.100:80 Tomcat服务器2:192.168.80.101:8080 192.168.80.101:8081 1.部署Nginx 负载均衡器 system…...
DeepChat行业应用:生物医药文献摘要→靶点关系提取→实验设计建议
DeepChat行业应用:生物医药文献摘要→靶点关系提取→实验设计建议 1. 项目背景与核心价值 在生物医药研发领域,研究人员每天需要阅读大量文献,从海量信息中提取关键发现、识别药物靶点关系,并设计后续实验方案。传统的人工处理方…...
手把手玩转三相SPWM逆变器
三相电压型SPWM逆变器控制设计及应用(原理图工程源代码工 10067-三相电压型SPWM逆变器控制设计及应用(原理图工程源代码工程仿真工程详细说明书PPT) 随着国家电网的发展,国明对于电网的使用要求越来越高,并且家家户户均…...
从COX分析到预后模型:如何用R筛选关键基因并画出发表级森林图?
从COX分析到预后模型:如何用R筛选关键基因并画出发表级森林图? 在生物信息学研究中,COX比例风险模型是分析基因与患者生存关系的重要工具。但许多研究者在完成初步分析后常陷入困惑:面对数十个候选基因,如何筛选真正有…...
P1AM CPU库:工业级嵌入式I/O控制框架解析
1. P1AM CPU库技术解析:面向工业自动化场景的嵌入式I/O控制框架1.1 平台定位与工程价值P1AM(ProductivityOpen Automation Module)并非通用型MCU开发板,而是一个专为工业现场总线级I/O扩展设计的嵌入式控制器平台。其核心价值在于…...
DeepSeek总结的DuckLake 中的数据内联:为数据湖解锁流式处理
原文地址:https://ducklake.select/2026/04/02/data-inlining-in-ducklake/ DuckLake 中的数据内联:为数据湖解锁流式处理 Pedro Holanda 2026-04-02 TL;DR: DuckLake 的数据内联功能将小批量更新直接存储在目录中,从而消除了“小…...
优艾智合冲刺港股:年营收3.4亿亏3.8亿 蓝驰与真格是股东
雷递网 雷建平 4月3日合肥优艾智合机器人股份有限公司(简称:“优艾智合”)日前更新招股书,准备在港交所上市。年营收3.4亿 亏损3.8亿优艾智合是一家工业具身智能科技公司,为半导体、能源化工、锂电、3C及其他制造、公用…...
时间放大器:从亚稳态到数字训练式的硬件实现解析
1. 时间放大器的核心价值与应用场景 时间放大器(Time Amplifier)这个名词听起来有点科幻,但它的原理其实非常接地气。想象一下你用两根手指同时按下钢琴的两个琴键,如果两次按键的时间差只有几毫秒,普通人耳朵可能分辨…...
小白程序员必看!从零理解并动手搭建智能体,附收藏指南
小白程序员必看!从零理解并动手搭建智能体,附收藏指南 本文深入浅出地讲解了智能体的定义、运行逻辑及搭建方法,适合小白和程序员学习。文章从智能体的标准定义入手,通过腾讯元宝的实例,阐述了智能体的核心运行逻辑——…...
Linux桌面/usr/share详解
/usr/share 是 Linux 桌面系统中一个极其核心的目录,遵循 FHS(文件系统层次结构标准)。它的核心定位是:存储架构无关的、只读的、应用程序之间共享的数据。简单理解:如果把系统比作一家公司,/usr/share 就是…...
【图像加密】基于 AES算法的图像位平面加密解密算法附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
