
QT
52_赫兹的鲸
这个作者很懒,什么都没留下…
展开
-
Qt使用COM组件(QAxObject)调用WPS无效的问题
最近用Qt调用COM组件的方式导出word报告,本来用office导出的,但是office自动更新到某个版本之后,word里面的图片不显示了。只好试试WPS,但是,报错了: m_wordWidget = new QAxObject(); bool bFlag = m_wordWidget->setControl("word.Application");//初始化COM对象,新建一个word应用程序 if(!bFlag) { bFlag = m_wordW原创 2021-12-23 09:58:37 · 5830 阅读 · 6 评论 -
QListView当前页(可视范围)全选反选
注意:需要先设置ListView支持多选QStandardItemModel *model = ui.listView->model(); for(int i=0; i<model->rowCount(); ++i) { QRect rectItem = ui.listView->visualRect(model->index(i,0)); if(ui.listView->viewPort()->visibleRegion().contains(rec原创 2021-02-02 14:17:27 · 1360 阅读 · 0 评论 -
QListView等视图更改选中时文本颜色
1.QSS样式表只能统一设置,不够灵活2.通过代理 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItem viewOption(option); //高亮显示与普通显示时的前景色一致(即选中行和为选中时候的文字颜色一样)原创 2020-12-07 15:35:46 · 2653 阅读 · 0 评论 -
QML调用C++的三种方法
1.注册法由于QML引擎与Qt元对象系统的紧密集成,可以从QML代码访问由QObject派生的类适当公开的任何功能。这使得C ++类的属性和方法可以直接从QML访问,通常很少或无需修改。QML引擎能够通过元对象系统内省QObject实例。这意味着,任何QML代码都可以访问QObject派生类实例的以下成员:属性(使用Q_PROPERTY注册的属性)方法(需注册为public slots或是标记为Q_INVOKABLE)信号(此外,如果已使用Q_ENUMS声明枚举,则可以使用枚举。)通常,无原创 2020-11-10 10:21:09 · 9236 阅读 · 0 评论 -
QListWidget删除问题
我所知道的QListWidget删除项有两种方法方法一 int n=ui->listWidget->count();//获取item的总数 //删去所有item for(int i=0;i<n;i++) { /* 使用takeItem(row)函数将QListWidget中的第row个item移除, 移除需要使用delete手动释放其在堆上占用的空间 */ //这里是0,原创 2020-11-06 14:05:29 · 3531 阅读 · 0 评论 -
Qt程序最小化或WIN+D后再打开,界面部分或全部假死的问题
前言碰到一个很奇怪的问题,双屏下,Qt程序最小化或WIN+D后再打开,界面出现部分或全部假死的现象,单屏下不会有这个问题,纠结了很久,总算解决了,Mark一下:原因在最小化窗口属性后,Qt :: WA_Mapped从QWidget中删除(可以在qwidget.cpp中设置断点到setAttribute_internal来检查它)。 但是在显示窗口后没有再次设置此属性。 如果不满足QWidgetBackingStore :: sync中的(discardSyncRequest(tlw,tlwExtra原创 2020-11-05 14:24:12 · 2450 阅读 · 2 评论 -
QDialog代码阻塞界面不阻塞
QDialog调用exec函数后,通常会阻塞其他窗口QDialog dlg(this); dlg.setModal(false); dlg.show(); dlg.exec;增加setModal和show之后,代码还是会阻塞到dlg退出后,但不会阻塞UI,可以操作dlg之外的窗口。原创 2020-09-28 15:40:22 · 3589 阅读 · 0 评论 -
QTableWidget用法总汇
1.QTableWidget不能在mainwindow中随主窗口的大小变化?解决:在表格外部添加布局。代码:tableWidget = new QTableWidget; tableWidget ->setObjectName(QString::fromUtf8("tableWidget")); QVBoxLayout *verticalLayout; verticalLayout->addWidget(tableWidget );2.将表格变为禁止编辑原创 2020-06-08 11:19:56 · 1423 阅读 · 0 评论 -
QTextEdit获取文本行号
1.光标法#include <QTextLayout> #include <QTextBlock> QTextCursor tc = ui.textEdit->textCursor(); //当前光标QTextLayout *lay = tc.block().layout();int iCurPos= tc.position() - tc.block().position();//当前光标在本BLOCK内的相对位置 //光标所在行int iCurrentLine原创 2020-05-27 10:15:20 · 2869 阅读 · 0 评论 -
QLineEdit对输入做限制
1、前言QLineEdit支持使用函数setValidator对输入做限制,支持整数、小数、正则等形式的Validator2、示例 //限制输入整数,范围0-100 ui->lineEdit->setValidator(new QIntValidator(0,100,this)); //限制输入小数,范围0.000000-999999999.999999,经度小数点后6位 ui->lineEdit->setValidator(new QDoubleValidato原创 2020-05-12 14:54:14 · 5107 阅读 · 0 评论 -
.pro文件转.vcproj文件(QtCreater项目转VS+Qt项目)
前言:QtCreater的.pro文件中,有许多写法在VS+Qt项目中,并不知道怎么写,网上相关的资料也很少,例如CONFIG,QTPLUGIN等,这个时候,我们就可以写好.pro文件,再将它转换为VS可以打开的.vcproj文件1、打开Qt命令行工具通常情况下,它在Windows开始菜单栏下,例如:2、进入.pro文件所在文件夹3、生成vcproj文件3.1、xx.pro的TEM...原创 2020-02-10 22:22:16 · 1982 阅读 · 1 评论 -
Qt/C++在子线程执行函数的三种方法
1、使用QtConcurrent前言: QtConcurrent 是命名空间 (namespace),它提供了高层次的函数接口 (APIs),使所写程序,可根据计算机的 CPU 核数,自动调整运行的线程数目。1.1、 函数原型QFuture<T> QtConcurrent::run(QThreadPool::globalInstance(), function, ...) ;......原创 2019-12-20 10:13:13 · 6274 阅读 · 2 评论 -
VS/Qt调用外部库的三种方法
1、代码法#ifdef _DEBUG #pragma comment (lib,"..\\debug\\my.lib") #else #pragma comment (lib,"..\\release\\my.lib") #endif2、VS工程属性配置法①、项目 → 属性 → 配置属性 → C/C++ → 常规 → 附加包含目录:加上库对应头文件目录 ②、项目 → 属性 → 配...原创 2019-12-20 09:49:12 · 4550 阅读 · 0 评论 -
Qt+Windows API给指定网卡增加IP
//pro文件中加入network模块#include <QNetworkInterface> #include <QProcess>//Windows API相关依赖#include"iphlpapi.h"#pragma comment(lib,"Iphlpapi.lib") //Windows API相关依赖//PIP_ADAPTER_INFO结构体存储...原创 2019-12-17 23:39:12 · 1754 阅读 · 1 评论 -
VS/Qt调用外部程序的几种方法
1、QProcess(Linux/Windows)QProcess::startDetached("calc.exe"); //也可用来执行命令行语句,如杀死进程QProcess::startDetached("takskill /f /im calc.exe"); 2、ShellExecute(Windows接口函数)ShellExecute(0,(LPCWSTR)L"open",...原创 2019-11-17 23:05:16 · 2140 阅读 · 0 评论 -
Qt文本过长时,缩减文本并显示省略号
//要显示的超长字符串 QString strDes = "这是一个非常非常非常长的字符串"; strDes = QFontMetrics(ui.label->font()).elidedText(strDes, Qt::ElideRight, ui.label->width())假设ui.label的长度小于strDes,则显示为这是一个......原创 2019-11-01 14:23:44 · 6888 阅读 · 0 评论 -
C++/Qt结构体初始化
结构体初始化我们经常会用到,使用未初始化的结构体,结果是不可预估的下面介绍几种常用的结构体初始化方式:1、结构体内分别初始化typedef struct stTemp { int nName; int nType; char arrayTemp[50]; stTemp():nName(-1),nType(-1) //构造函数初始化列表 //也可用 struct s...原创 2019-10-15 10:46:09 · 11551 阅读 · 1 评论 -
QT音乐播放问题QMedia的使用
最近想做一个Linux开发板的QT音乐播放器,准备先在Windows上试试,写了一些代码如下: 注:使用QMediaPlayer需要在项目文件.pro加入QT += multimedia 头文件为默认,cpp文件如下cpp文件: #include "widget.h"#include "ui_widget.h"#include #include原创 2018-01-15 19:22:16 · 12690 阅读 · 4 评论 -
QT使用提升的绘图类问题,画饼图、直方图
最近自己在写一个QT程序,需要用到绘图,我自己写了两个绘图类一个画饼图,一个画直方图,把他们以提升的方式加入到主程序,结果只有一个图画出来了。 代码如下: pie.h#ifndef PIE_H#define PIE_H#include &lt;QWidget&gt;class pie : public QWidget{ Q_OBJECTpublic:...原创 2018-01-08 14:27:51 · 4993 阅读 · 3 评论 -
QT+MySQL程序打包发布后提示driver not loaded driver not loaded的问题
之前写了一个程序,用到了QT和MySQL,使用QT自带的打包工具打包发布之后,提示问题, 网上搜了很多,都说是缺少数据库插件,但是说法略有不同,有的说缺少libmysql.dll,有的说缺少qsqlmysql4.dll…… 没办法,只好一个个方法尝试,过程不赘述,解决方法是:将libmysql.dll文件放在exe文件的同级目录,如果你本机的libmysql.dll行不通,可以试试我的 ...原创 2018-01-24 10:44:03 · 6994 阅读 · 4 评论 -
QT样式表,setstylesheet,控件使用图片
Qt的控件样式可以通过多种方法进行设置 1、UI设置 在Qt的设计页面,右键控件即可弹出菜单,选择改变样式表,如图 在弹出的样式表编辑框中,可以对样式表进行各种修改 还可以在控件属性栏进行设置样式表:字体、大小等 2、代码设置样式表 以按钮为例,介绍代码设置样式表,需要包含头文件QStylesheet//设置全局样式表使用this,按钮正常态、悬...原创 2018-01-26 13:20:44 · 6938 阅读 · 0 评论 -
QT字体详解
首先看看QT官方的帮助文档:QFont类指定用于图形文本的字体。 创建QFont对象时,您可以指定希望字体具有的各种属性。Qt将使用具有指定属性的字体,或者如果不存在匹配字体,Qt将使用最接近的匹配安装字体。实际使用的字体属性可从QFontInfo对象中检索。如果窗口系统提供精确匹配,则exactMatch ( )返回true。使用QFontMetrics获取度量值,例如使用QFon...原创 2018-01-26 13:05:55 · 36298 阅读 · 6 评论 -
Qt设置字幕滚动播放
Qt设置滚动字体的方法如下: 以最简单也最常用的label为例: QString labelpro = "Qt设置字幕滚动播放";//设定定时器,每500毫秒触发一次定时器事件QTimer *pTimer = new QTimer(this); pTimer->start(500);connect(pTimer, SIGNAL(timeout()), this, S...原创 2018-03-22 19:56:02 · 2527 阅读 · 0 评论 -
Qt线条阴影
Qt中实现线条阴影有两种办法 一、用label控件label有上下两个边线 设置两条线挨着,然后分别设置上面和下面线的颜色就行了 这个是效果: 具体设置如下: 1、label控件上鼠标右键,改变样式表 2、编辑样式表, 添加颜色 编辑如下: border-top: 3px solid rgb(255, 255, 255); border-bott...原创 2018-03-19 15:59:08 · 1410 阅读 · 0 评论 -
Qt设置TextEdit一直显示最新的数据
TextEdit是我们常用的Qt控件,用来显示文本信息,当文本信息不断填入TextEdit中时,TextEdit居然没有显示最新的信息,研究之后,找到了解决方案: //设定定时器,每秒触发一次事件,调整TextEdit光标位置QTimer *CurrentTime = new QTimer(this);CurrentTime->start(1000);connect(Curre...原创 2018-03-23 13:48:46 · 16058 阅读 · 5 评论 -
Qt-QCustomplot画静态、动态曲线教程图解
1、QCustomPlot介绍 QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线、动态曲线、多重坐标曲线,柱状图,蜡烛图等。只需要在项目中加入头文件qcustomplot.h和qcustomplot.cpp文件,然后使一个widget提升为QCustomPlot类,即可使用。QCustomPlot官网: http://www.qcustomplot.com/...原创 2018-03-23 14:18:22 · 59282 阅读 · 27 评论 -
Qt用算法画平滑曲线(cubicTo)
Qt 中可以使用 QPainterPath::cubicTo() 函数绘制如下的平滑曲线 函数原型:void QPainterPath::cubicTo(const QPointF & c1, const QPointF & c2, const QPointF & endPoint) 使用C1和C2指定的控制点在当前位置和给定端点之间添加三次贝塞尔曲线,添加曲线后...转载 2018-03-23 21:45:50 · 24653 阅读 · 6 评论 -
Qt使用全局变量
1、在项目的某个头文件中声明全局变量,如msdn.h: extern QString csdn;extern QString qter;2、在main.cpp中将全局变量实例化,此后不需要再次实例化 QString csdn;QString qter;3、其他文件(如qtcn.cpp)需要使用全局变量,只需要包含声明该全局变量的头文件即可: 如qtcn.cpp中:#i...原创 2018-03-23 22:01:24 · 2627 阅读 · 0 评论 -
QString用法详解(连接、替换、初始化与格式转换、拆分等等)
QString在Qt的各种数据转换中可谓举足轻重,熟悉QString的用法对于Qt编程真的是如虎添翼:QString 字符串有相当多的操作符和函数,此处只介绍一些比较常用的:(1) “+” 用于组合两个字符串,“+=” 用于将一个字符串追加到另一个字符串的末尾,例如: QString str1 = "Welcome"; str1 = str1 + "to you !"; //...原创 2018-03-20 18:38:53 · 48411 阅读 · 1 评论 -
Qt多线程实例与connect第五个参数
Qt是一个GUI框架,在GUI程序中,主线程也叫GUI线程,因为它是唯一被允许执行GUI相关操作的线程。对于一些耗时的操作,如果放在主线程中,就是出现界面无法响应的问题。 解决方法一:在处理耗时操作中频繁调用QApplication::processEvents()。这个函数告诉Qt去处理那些还没有被处理的各类事件,然后再把控制权返还给调用者。QElapsedTimer et; ...原创 2018-03-25 11:34:41 · 14714 阅读 · 17 评论 -
Qt帮助文档无法打开的解决方案
最近在新电脑上安装Qt,发现帮助文档怎么都打不开,经过一番研究,终于解决了这个问题,解决方案如下: 1、打开工具栏的选项 2、进入帮助,选择添加 3、找到Qt的安装目录,选择所有后缀为qch的文件,打开 4、应用更改,一般来说此刻就可以正常查阅帮助文档了,如果不行,重启一下Qt ...原创 2018-03-21 09:35:16 · 5885 阅读 · 7 评论 -
Qt编译后提示QSqlDatabase: QMYSQL driver not loaded的问题
最近在写一个Qt+MySQL的程序,编译运行提示QSqlDatabase: QMYSQL driver not loaded问题,在网上查阅资料之后,有的说是Qt和MySQL位数不统一(要么都是32位,要么都是64位),但我的Qt和MySQL都是32位的呀! 我之前写的Qt+MySQL的程序运行没问题,发布之后才提示QSqlDatabase: QMYSQL driver not loaded问...原创 2018-03-21 10:33:08 · 1137 阅读 · 0 评论 -
QML入门教程:一、QML和QtQuick简介以及QML实例
从 Qt 4.7 开始,Qt 引入了一种声明式脚本语言,称为 QML(Qt Meta Language 或者 Qt Modeling Language),作为 C++ 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。 QML 是一种基于 JavaScript 的声明式语言。在 Qt 5 中, QML 有了长足进步,并且同 C++ 并列...原创 2018-04-08 11:44:09 · 197423 阅读 · 17 评论 -
QML入门教程:二、QML语法
1、QML 是一种声明语言,用于描述程序界面。 2、QML 将用户界面分解成一块块小的元素,每一元素都由很多组件构成。 3、QML 定义了用户界面元素的外观和行为;更复杂的逻辑则可以结合 JavaScript 脚本实现。这有点类似于 HTML 和 JavaScript 的关系,前者用来显示界面,后者用来定义行为。 4、QML 最简单的元素关系是层次关系。子元素处于相对...原创 2018-04-08 13:39:30 · 14969 阅读 · 10 评论 -
QML入门教程:三、QML基本元素
QML 基本元素可以分为可视元素和不可视元素两类。可视元素(例如前面提到过的Rectangle)具有几何坐标,会在屏幕上占据一块显示区域。不可视元素(例如 Timer)通常提供一种功能,这些功能可以作用于可视元素。 这里我们将会集中介绍最基本的可视元素:Item、Rectangle、Text、Image 和MouseArea。 1、Item Item是所有可视元素中最基本的一个。它是所有...原创 2018-04-08 14:37:42 · 6903 阅读 · 1 评论 -
Qt中MySQL的使用实例以及数据库遍历
1、连接数据库 QSqlDatabase db; //需要进行判断默认的连接名是否存在, //如果不存在才使用addDatabase()方法,如果存在则使用database()方法 if(QSqlDatabase::contains("qt_sql_default_connection")) db = QSqlDatabase::databa...原创 2018-03-21 17:42:46 · 7873 阅读 · 2 评论 -
Qt十六进制转十进制转ASCII码,附ASCII码表
分享一个Qt十六进制转十进制转ascii码,最近用的比较多,所以将它写成了内联函数 看代码://返回16进制数的ascii码值inline int ServeWidget::changefromHex_to_ascii(QString str){ QString str_hex = str; //获取十六进制数 int dec = str...原创 2018-03-21 17:53:40 · 19140 阅读 · 3 评论 -
QML入门教程:四、QML组件
QML 可以用基本元素组合成一个复杂的元素,方便以后我们的重用。这种组合元素就被称为组件。组件就是一种可重用的元素。QML 提供了很多方法来创建组件。不过,这里我们只介绍一种方式:基于文件的组件。基于文件的组件将 QML 元素放置在一个单独的文件中,然后给这个文件一个名字。以后我们就可以通过这个名字来使用这个组件。例如,如果有一个文件名为 Button.qml,那么,我们就可以在 QM...原创 2018-04-08 16:24:11 · 5647 阅读 · 2 评论 -
Qt段错误集录(RtlWerpReportException failed with status code :-1073741823. Will try to launch the process)
Qt中经常出现段错误,其原因大多是内存问题,形式如下: RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly这种错误在Linux下通常称为“段错误”,错误原因一般是内存问题,如访问了空指针、堆栈溢出、内存泄漏等,发生错误后第一件事就是检查内...原创 2018-04-08 16:32:19 · 9251 阅读 · 3 评论 -
降低Qt程序CPU占用率
发现自己的程序CPU占用率奇高:达到百分之五十多! 按照网上的说法,原因有以下几点: 1、在paintEvent中调用update函数,造成无限循环 2、频繁刷新数据 3、复杂的浮点运算 4、死循环 5、paintEvent里操作太多 我的程序是通过网络每秒一次读取下位机数据,并调用Qcustomplot绘图,并每分钟将实时数据存取到数据库。 一步步调试,寻找原因,首...原创 2018-04-08 17:02:07 · 9648 阅读 · 0 评论