Qt
qter工作过程中的学习,思考和实践,独乐乐不如众乐乐,愿与诸君共享。
星火撩猿
莫道君行早,更有早行人;全心敲代码,天道自酬勤。
展开
-
QGraphicsView教程
简介Graphics View 提供了一个用于管理和交互大量的可定制的 2D 图形项与用于可视化这些项的 View 小部件的 surface(曲面),并提供缩放(zooming)和旋转(rotation)功能支持。该框架包括事件传播体系结构(an event propagation architecture),该体系结构允许对场景中的项目进行精确的双精度交互功能。图元可以被如下操作处理:按键事件,鼠标按下,移动,释放和双击事件,它们还可以跟踪鼠标的移动。Graphics View 使用 BSP(Bi原创 2022-02-08 14:19:46 · 6388 阅读 · 0 评论 -
Qt QApplication::processEvents
应用场景一:处理密集耗时的事情有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态。例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响应用户的任何操作,窗口也不会重新绘制,从而处于“无法响应”状态,这是一个非常糟糕的体验 。在这种情况下,有一种方法是使用多线程,即在子线程中处理文件保存,主线程负责界面相关。如果不想使用多线程,最简单的办法就是在文件保存过程中频繁调用QApplication::processE原创 2022-01-24 15:35:12 · 587 阅读 · 0 评论 -
QMenu设置样式
QString qss = "QMenu {" "background-color: rgb(57, 65, 69);" "color: rgb(255,255,255);" "border: 1px solid rgb(172, 172, 172);" "border-radius: 3px; }" "QMenu::item {" "background-color: transparent;" "border-bottom: 1px solid rgb(172, 172, 172);"原创 2022-01-19 11:26:50 · 2480 阅读 · 0 评论 -
Qt中绘制平方毫米符号
char16_t square = 0xB2;QString paintStr = "mm" + QString::fromUtf16(&square, 1);原创 2022-01-15 16:32:17 · 870 阅读 · 0 评论 -
QListWidget自定义item时出现布局显示误差解决方法
思路:设置Delegate,覆写updateEditorGeometry方法。代码:#ifndef MARKINFOLISTDELEGATE_H#define MARKINFOLISTDELEGATE_H#include <QStyledItemDelegate>class MarkInfoListDelegate : public QStyledItemDelegate{ Q_OBJECTpublic: MarkInfoListDelegate(QWidget原创 2022-01-05 11:36:43 · 705 阅读 · 0 评论 -
QListWidgetItem设置获取指针型数据
QListWidgetItem *pItem = new QListWidgetItem();MarkItem *pItemWidget = new MarkItem(this);pItem->setData(1, QVariant::fromValue((void *)pItemWidget));for (int i = 0; i < ui->markmgr_listWidget->count(); ++i) { QListWidgetItem *ptTmpWidge原创 2022-01-04 19:41:56 · 577 阅读 · 0 评论 -
QWidget对象设置获取指针型属性数据
ModelSign *pModel = new ModelSign;QWidget *pWdg = new QWidget;pWdg->setProperty("obJectName", QVariant::fromValue((void *)pModel));void *pModelSignCore = pWdg->property("obJectName").value<void *>();原创 2022-01-04 19:35:31 · 2191 阅读 · 0 评论 -
测试函数内部执行时间
#include<QElapsedTimer>static QElapsedTimer t;t.start();qDebug() <<t.elapsed();原创 2021-12-29 19:27:24 · 266 阅读 · 0 评论 -
Qt中优化操作体验(信号发送频率)
思路通过定时器来控制,调整信号发送频率。代码constexpr int THROTTLE_TIME = 200; // milliseconds auto now = QDateTime::currentMSecsSinceEpoch(); if (!m_timer) { m_timer = new QTimer(this); connect(m_timer, &QTimer::timeout, [=]() { sgn原创 2021-12-19 15:42:33 · 843 阅读 · 0 评论 -
QLinearGradient之画渐变线
QLinearGradient linear(m_ptFirst, QPoint(p1x, p1y));linear.setColorAt(0.0f, QColor(255, 202, 76, 255));linear.setColorAt(1.0f, QColor(255, 231, 131, 0));QPen penLine = pen;penLine.setBrush(QBrush(linear));pPainter->setPen(penLine);pPainter->dra原创 2021-12-13 14:06:17 · 455 阅读 · 0 评论 -
Dicom窗宽窗位配置化显示
背景项目中要求设置不同的几个窗宽窗位预设值。思路读取xml文件,包含key-value,来设置dicom。代码xml配置<?xml version="1.0" encoding="utf-8" ?><Document> <WindowLevel> <item name="Default Window" window_width="800" window_center="300" /> <item name原创 2021-11-17 20:26:03 · 449 阅读 · 0 评论 -
Dicom影像配置化显示Tag值
背景Dicom影像处理软件要求根据不同部署医院显示不同的Tag信息,Tag显示位置也有变化。思路提供配置文件,由运维售后工程师配置处理,可配置显示哪些tag信息及其显示位置。代码xml配置<?xml version="1.0" encoding="utf-8" ?><Document> <Modality name="DEFAULT"> <DrawType name="CornerInfo">原创 2021-11-17 20:18:44 · 915 阅读 · 0 评论 -
QListWidget自定义item实现
效果如下:关键代码://添加itemvoid CListTestWgt::AddItem(MarkType type, int serialNum, const QString &content) { CItemWidget *pItemWidget = new CItemWidget(this); pItemWidget->SetData(type, serialNum, content); QListWidgetItem *pItem = new原创 2021-10-30 18:57:37 · 558 阅读 · 0 评论 -
Qt常用样式表
字体属性:(font)大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX、PD样式 {font-style: oblique;}(偏斜体) italic;(斜体) normal;(正常)行高 {line-height: normal;}(正常) 单位:PX、PD、EM粗细 {font-weight: bold;}(粗体) lighter;(细体) normal;(正常)变体 {font-variant: small-c原创 2021-10-11 15:45:34 · 4274 阅读 · 0 评论 -
Qt安装包制作IFW
IFW简介Qt Installer Framework 简称 Qt IFW,是由 Qt 官方提供的安装程序制作框架。gotoNSIS简介NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System)的缩写,它是一个免费的 Win32 安装、卸载系统,它的特点:脚本简洁高效;系统开销小;当然进行安装、卸载、设置系统设置、解压文件等等更不在话下,几乎可以做所有的事情。更多的功能请阅读蓝色网际的《NSIS帮助文档》。goto.原创 2021-09-18 13:24:23 · 302 阅读 · 0 评论 -
QTest 单元测试框架
简介QTestLib是Qt提供的一种针对基于Qt编写的程序或库的单元测试框架。QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展功能。教程goto1goto2原创 2021-09-08 10:44:24 · 384 阅读 · 0 评论 -
Qt中输出函数执行时间
背景项目中需要对耗时操作进行优化。思路打印操作中各函数耗时,定位并进行算法优化。示例QElapsedTimer tm;tm.start();......qDebug() << __FUNCTION__ << " executed" << tm.elapsed();原创 2021-09-03 10:10:09 · 830 阅读 · 0 评论 -
QListview获取Item内容变化信号及内容
背景项目中需要修改列表中item名称,并获取修改后的item字符串,但是QListview中没有直接item名称改变的信号。思路QListview设置双击操作修改item内容;设置model来操作数据,通过model的datachanged信号来实时获取item改变名称。示例QListView *pListView = new QListView();QStringListModel *pStringlistModel = new QStringListModel();pStringl原创 2021-07-10 08:06:44 · 2691 阅读 · 1 评论 -
工程代码目录组织
EXE层面的功能测试模块层面的功能测试原创 2021-06-28 22:21:30 · 151 阅读 · 1 评论 -
Qt实现wgt在点击focux状态时加边框效果
背景项目中需要给一个自定义的QWidget控件加选中边框。思路加透明背景,设置border带颜色边框,响应focux事件切换选中及默认状态。实现m_borderWgt = new QWidget(this);m_borderWgt->setAttribute(Qt::WA_TransparentForMouseEvents);m_borderWgt->setStyleSheet("background:transparent; border:1px solid blue;"原创 2021-06-27 08:20:30 · 405 阅读 · 0 评论 -
Qt布局设置边距
QWidget *pWgt0 = new QWidget();QVBoxLayout *pLytV = new QVBoxLayout();pLytV->setMargin(0);//设置外边距pLytV->setSpacing(0);//设置内边距pWgt0->setLayout(pLytV);注意:默认边距为5。原创 2021-06-15 15:43:41 · 3889 阅读 · 0 评论 -
Qt Creator使用Heob检测内存泄漏
使用步骤1.设置Heob路径:Analyze=》Heob,heob64.exe需要自己下载。2.点击“OK”启动测试,程序运行后进行各种常规操作并关闭程序。3.等待Hebo工具分析结果,完成后会出现如下内存泄漏代码定位,可跳转到相应位置进行分析修改,重新测试。...原创 2021-05-31 18:42:08 · 4287 阅读 · 2 评论 -
Qt中MVC模式分析与使用
Qt中MVC模式实际上是MVD,如下图所示:QListView,QTreeView,QTableView都用到了MVD模式,Model和View都交由Delegate集中处理。与QListWidget,QTreeWidget,QTableWidget相比,View控件类可以处理大批量数据,不会出现延迟卡顿现象。...原创 2021-04-03 13:47:21 · 1684 阅读 · 0 评论 -
Qt实现QWidget中截图效果
前言先截图保存,再定位到文件选中状态代码{ QWidget *pWgt; //假设里面有图像 QImage img = pWgt->grab().toImage(); QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save Image"), "", "*.png"); if (fileName.isEmpty() == false) { img.save(fileName)原创 2021-04-01 14:37:18 · 2092 阅读 · 0 评论 -
Qt中ui开发小技巧总结(2)
1.布局中加弹簧 pVLayout->addSpacerItem(new QSpacerItem(0, 800, QSizePolicy::Minimum, QSizePolicy::Expanding));2.QWidget设置圆角显示QWidget *pMainWgt = new QWidget();pMainWgt->setStyleSheet("background-color:rgb(80,80,80);" "borde原创 2021-03-31 15:19:30 · 373 阅读 · 0 评论 -
Qt捕获键盘按键消息
1.单个控件内部捕获处理,关键代码如下://头文件protected: virtual void keyPressEvent(QKeyEvent *ev); virtual void keyReleaseEvent(QKeyEvent *ev); //实现 void TestWidget::keyPressEvent(QKeyEvent *ev) { if (ev->key() == Qt::Key_Space) { //处理事件 } QWidget::k原创 2021-03-29 18:35:12 · 2483 阅读 · 1 评论 -
Qt程序自动化测试工具
简介Squish是用于功能测试的著名自动化工具,可用于测试用户界面并在回归测试阶段应用测试脚本。它是由Froglogic开发,实施和维护的,目的是使该软件可供整个行业的软件专业人员在多种不同的软件开发平台上应用该工具。优缺点介绍Squish官网...原创 2021-03-29 10:40:54 · 2598 阅读 · 0 评论 -
Qt中ui开发小技巧总结(1)
1.标题栏设置系统图标m_pBtnClosed = new QPushButton;m_pBtnClosed->setToolTip(tr("关闭"));m_pBtnClosed->setIcon(QIcon(QApplication::style()->standardIcon(QStyle::SP_TitleBarCloseButton)));m_pBtnMinimized = new QPushButton;m_pBtnMinimized->setToolTip(tr原创 2021-03-24 10:57:36 · 525 阅读 · 0 评论 -
qt窗体及控件自适应
场景描述使用ui设计器进行界面布局,左侧控件列表中选择合适控件拖拽至主界面如下所示具体操作:布局设置->选定要进行布局的控件,然后进行右击最后一项就是布局,或者直接在左侧栏里拖入布局控件进行layout。比例调整->如果想对两个控件进行比例调控的话,就直接用到layout下的layoutstretch进行比例调整,这个比例调整会一直保持不变动。顶层布局->一定要在窗体中进行布局,只有设置了顶层布局,控件才能自适应窗体,一般是设置GridLayout。使用扩展ui原创 2021-03-23 18:30:13 · 898 阅读 · 0 评论 -
qtcreator设置clang-format优化代码风格
设置步骤如下:创建.clang-format,放置在pro文件同一目录,保存即改变代码格式一致化。文件内容如下:#https://clang.llvm.org/docs/ClangFormatStyleOptions.htmlBasedOnStyle: LLVMStandard: Cpp11IndentPPDirectives: AfterHashAllowShortFunctionsOnASingleLine: EmptyBinPackArguments: falseIndentWid原创 2021-03-23 13:42:58 · 763 阅读 · 2 评论 -
Qt可执行程序寻找依赖库脚本
具体设置deployQt.bat文件放置在可执行程序目录,一般是debug或release目录,双击自动寻找复制。bat内容如下:FOR /f “delims=” %%A in (‘dir /b %~dp0*.exe’) DO SET “exefile=%%A”C:\Qt\Qt5.12.10\5.12.10\msvc2013_64\bin\windeployqt.exe %exefile%注意:windeployqt.exe 路径根据实际环境设置。...原创 2021-03-22 11:27:11 · 276 阅读 · 0 评论 -
Qt中增加预编译以提高程序的编译速度
具体设置步骤如下(1)工程.pro文件加入下面代码CONFIG+=precompile_header PRECOMPILED_HEADER=stable.h (2)在建立头文件Stable.h,代码内容为#ifndef STABLE_H#define STABLE_H#include<QtCore>#include<QtGui>#endif // STABLE_H(3)重新构建文件编译速度加快了很多,这样处理之后,会生成.pch\C++文件大约165原创 2021-03-20 18:09:39 · 563 阅读 · 0 评论 -
qtCreator中调试程序弹出cmd窗口方法
前言可以使用qDebug打印信息,在窗口中查看,不影响程序正常运行。方法pro文件中添加CONFIG += console或CONFIG += cmdline原创 2021-03-19 18:05:26 · 1367 阅读 · 0 评论 -
QtCreator中常见编译错误总结
前言QtCreator中编译常见的问题,分析定位及解决方案总结。1.现象2.定位可能是在头文件处以及以上部分不小心敲出了多余的字符。3.错误原创 2021-03-18 18:27:50 · 741 阅读 · 0 评论 -
qt与duilib对比
适用平台dulib仅适用于windows平台,qt适用于windows,linux,max,android,ios,arm等平台。适用范围dulib仅用于绘制展示界面,是一个小而精的界面库,适用于做GUI程序;qt大而全,界面绘制展示仅是其中重要的一个功能,它还可以做控制台,工具,服务端程序开发。包含文件操作,网络操作等一系列对系统api的封装,是一个框架。实现方式duilib界面绘制是dui的方式,即所有的控件都是逻辑上的,最终统一绘制,适用于交互比较频繁的GUI程序,会更顺畅;qt原创 2021-02-27 08:25:23 · 4467 阅读 · 10 评论 -
Qt信号槽简单实现
信号槽简介在Qt中对象间通信,广泛使用了信号槽机制。信号槽机制本质上就是回调函数的应用,Qt中通过扩展C++语法来实现,对比回调函数使用更便利,定制性更好。C++语言扩展是通过元对象编译器moc来实现,Qt 将源代码交给标准 C++ 编译器,如 gcc,mingw,msvc之前,需要事先将这些扩展的语法去除掉,完成这一操作的就是 moc。元对象编译器及其作用moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt程序在交给标准编译器预编译之前要使用 moc 分析原创 2021-02-26 22:58:50 · 698 阅读 · 0 评论 -
Qt5中json串生成与解析
简单的 JSON 对象构造一个简单的 JSON 对象:{ "Age": 27, "Expert": true, "Name": "Qter"}生成如下:// 构建 JSON 对象 QJsonObject json; json.insert("Name", "Qter"); json.insert("Age", 27); json.insert("Expert", true); // 构建 JSON 文档 QJsonDocument docu原创 2021-02-24 23:14:40 · 329 阅读 · 0 评论 -
Qt5程序常规调试方法总结
1.使用qDebug打印关键信息,在程序输出窗口进行查看,如:void QtAppDebug::on_pushButton_clicked() { qDebug() << "---QtAppDebug---" << endl; }2.使用QMessageBox显示关键信息,在程序运行过程中通过窗口查看,如:void QtAppDebug::on_pushButton_clicked(){ QMessageBox::information(this,"T原创 2021-02-24 16:45:44 · 940 阅读 · 0 评论 -
Qt5中设置应用程序图标及可执行程序图标
步骤如下,超简单:准备个ico图标,如applogo.ico,放置在pro配置文件同一目录下。在pro配置文件中加上 RC_ICONS = applogo.ico,applogo.ico如果没放在pro同一目录,ico路径灵活配置。已经可以了,效果如下。...原创 2021-02-22 21:03:09 · 520 阅读 · 0 评论 -
QStackedWidget+QButtonGroup实现Tab页效果
设置button带选中状态,关联button到QButtonGroup,QButtonGroup点击事件中关联QStackedWidget显示,效果如下:代码如下:testwgt.h#ifndef TESTWGT_H#define TESTWGT_H#include <QWidget>#include <QButtonGroup>#include <QStackedWidget>class TestWgt : public QWidget{原创 2021-02-22 16:38:32 · 511 阅读 · 0 评论