Qt之路
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 评论 -
Qt使用正则实例
1、寻找// integers 1 to 9999QRegExp rx("[1-9]\\d{0,3}");// the validator treats the regexp as "^[1-9]\\d{0,3}$"QRegExpValidator v(rx, 0);QString s;int pos = 0;s = "0"; v.validate(s, pos); ...原创 2020-05-12 15:06:55 · 254 阅读 · 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打开外部文件/文件夹
Qt打开路径原创 2019-12-19 22:38:33 · 6407 阅读 · 1 评论 -
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 · 1755 阅读 · 1 评论 -
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 评论 -
Qcustomplot设置曲线风格
1、设置曲线风格 函数:setLineStyle ( LineStyle ls) 用法:Customplot->graph()->setLineStyle((QCPGraph::lsStepLeft)); 各种风格如图: 2、设置曲线上点的风格或不显示点(默认不显示点) Customplot->graph()->setScatterStyle(...原创 2018-04-10 13:31:34 · 5329 阅读 · 0 评论 -
Qcustomplot设置图例与曲线同步选中
Qcustomplot入门请点击: Qcustomplot入门教程 1、设置Qcustomplot属性: //设置基本坐标轴(左侧Y轴和下方X轴)可拖动、可缩放、曲线可选、legend可选、设置伸缩比例,使所有图例可见CustomPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom| QCP::iSelectAxes |...原创 2018-04-10 14:34:31 · 7438 阅读 · 3 评论 -
Qt设置QLineEdit控件不可编辑、密文输入、输入格式等小技巧
1、设置不可编辑 setReadOnly(false); //或 setEnabled(false); //或 setFocusPolicy(Qt::NoFocus);//无法获得焦点,自然无法输入,其他文本控件类似 //或 hasAcceptableInput(false);2.setPlaceholderText()设置提示文字 如图,搜索输入框,没有输入任何字符时...原创 2018-04-02 17:33:31 · 38633 阅读 · 4 评论 -
Qt中DateTimeEdit等时间日期控件设置显示格式
Qt中,dateTimeEdit的默认格式为: 修改格式有两种方法: 1、通过代码 ui->dateTimeEdit->setDisplayFormat("yyyy-MM-dd hh:mm:ss"); //上述格式为年月日,时分秒2、通过UI 默认格式代码为:yyyy/M/d dddd AP h:mm 效果: 有个很有趣的发现是:修...原创 2018-04-03 09:53:22 · 36167 阅读 · 1 评论 -
QTableView/QTableWidget设置整行选中且不可编辑
QTableView设为不可编辑: ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); QTableView设置整行选中: ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);//设置选中模式...原创 2018-04-03 10:16:45 · 26139 阅读 · 12 评论 -
QTableView设置显示的日期时间格式
如果用Tableview自带的delegate,显示的时间可能不能符合要求。 这就需要我们编写新的delegate类。 在项目中加入该类,并在项目的cpp文件中加入该类的头文件:#include <timeeditdelegate.h> 使用方法: ui->tableView->setItemDelegateForColumn(1, new TimeEditD...原创 2018-04-03 11:56:14 · 3628 阅读 · 0 评论 -
Qt中QTableView设置分页显示的三种方法
1、已知所有数据的情况下,以MVC模式对数据进行分页处理: 参考链接:http://www.cnblogs.com/caomingongli/archive/2011/11/17/2252745.html 参考链接:https://blog.youkuaiyun.com/xujiali5172923/article/details/47835265 2、数据库很大的时候,QTableView会自动生...原创 2018-04-04 11:58:31 · 22036 阅读 · 1 评论 -
Qt获取网页数据方法与经验总结
三个头文件: #include <QtNetwork/QNetworkAccessManager>#include <QtNetwork/QNetworkRequest>#include <QtNetwork/QNetworkReply>基础理论知识: QNetworkRequest 类用于表示网络请求,它也充当一个与请求信息相关的通用容器...原创 2018-04-04 13:29:30 · 6680 阅读 · 2 评论 -
Qt中QTableView设置自动排序的经验
采用QSqlTableModel将数据库数据直接放入QTableView中,使用一行代码setSortingEnabled(true);即可实现点击表头自动排序,并且支持顺序和逆序: //设置表格模型//model = new QSqlTableModel(this);//指定使用的表model->setTable("data_net");//将model放入view中ui...原创 2018-04-04 15:48:45 · 8634 阅读 · 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 评论 -
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 评论 -
Qt中Lambda表达式的返回值问题:control reaches end of non-void function [-Wreturn-type]
Qt程序构建后警告:control reaches end of non-void function [-Wreturn-type] 它的意思是:控制到达非void函数的末尾。意识就是一些本应带有返回值的函数到达结尾后可能并没有返回任何值。 警告出现的代码段如下: connect(UpdateTemp,&QTimer::timeout,[=]() { ...原创 2018-04-09 09:43:50 · 26679 阅读 · 0 评论 -
Qt文件操作详解(创建、写入、删除、INI、XML文件等)
1、创建文件夹 头文件: #include <QDir>#include <QMessageBox>核心代码如下: //实例QDir QDir *folder = new QDir; //判断创建文件夹是否存在 bool exist = folder->exists("D:/NewFolder"); if(...原创 2018-03-28 15:53:56 · 38067 阅读 · 9 评论 -
Qt-Qcustomplot设置并使用双重坐标轴(刻度不同的X、Y轴)
在Qcustomplot的实际使用中,有时候我们需要绘制多个曲线,而曲线的范围又有着较大的差异,此时,我们需要刻度不同的X、Y轴,Qcustomplot的入门可以参考我的另一篇博客: https://blog.youkuaiyun.com/qq_40194498/article/details/79666903 设置不同刻度的X、Y轴核心代码: //设置左边Y轴的范围(初始Y轴) ...原创 2018-03-29 10:10:47 · 18396 阅读 · 16 评论 -
Qt-Qcustomplot坐标轴缩放、拖动等调整
Qcustomplot入门请点击: Qcustomplot入门教程 Qcustomplot中可以设置坐标轴属性: 1、 setInteractions函数//设置基本坐标轴(左侧Y轴和下方X轴)可拖动、可缩放、曲线可选、legend可选、设置伸缩比例,使所有图例可见CustomPlot->setInteractions(QCP::iRangeDrag|QCP::iRange...原创 2018-03-29 13:37:51 · 38556 阅读 · 13 评论 -
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 评论 -
Qt多线程实例与connect第五个参数
Qt是一个GUI框架,在GUI程序中,主线程也叫GUI线程,因为它是唯一被允许执行GUI相关操作的线程。对于一些耗时的操作,如果放在主线程中,就是出现界面无法响应的问题。 解决方法一:在处理耗时操作中频繁调用QApplication::processEvents()。这个函数告诉Qt去处理那些还没有被处理的各类事件,然后再把控制权返还给调用者。QElapsedTimer et; ...原创 2018-03-25 11:34:41 · 14714 阅读 · 17 评论 -
QPalette实例教程
QPalette是一款非常好用的颜色设置工具: 头文件:#include <QPalette> (^-^我没有用这个头文件也可以使用QPalette)常用函数: void setBrush(ColorRole role, const QBrush & brush)void setBrush(ColorGroup group, ColorRole...原创 2018-03-26 12:40:05 · 1019 阅读 · 0 评论