![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Qt
木木木.
我要一步一步往上爬 在最高点乘着叶片往前飞
展开
-
Qt开发之路61---编译错误:error:definition of static data member ‘*::staticMetaObjectExtraData‘ of dllimport
编译报错definition of static data member '*::staticMetaObjectExtraData' of dllimport原创 2022-12-30 16:50:35 · 1118 阅读 · 1 评论 -
Qt开发之路60---Qt日志重定向之输出Log至文件或UI控件上
软件里面的打印信息,通过日志记录到文件或者输出到控件上,方便查看。Qt有Debug、Warning、Info、Critical、Fatal五种级别的调试信息。Qt4提供了qInstallMsgHandler函数Qt5提供了qInstallMessageHandler函数对qDebug、qWarning、qCritical、qFatal等函数输出信息的重定向处理。...原创 2022-07-08 21:45:00 · 4317 阅读 · 5 评论 -
Qt开发之路59---QPushButton的pressed,released,clicked,toggled响应的区别
PushButton提供如下信号pressed > toggled > released > clicked打印结果如下:原创 2022-06-08 00:00:00 · 2602 阅读 · 0 评论 -
Qt开发之路58---QButtonGroup 实现单选、多选(QRadioButton,QCheckButton,QPushButton,QToolButton)
一:简介QButtonGroup 主要是对按键进行分组,便于按键管理。二:功能添加按钮设置id:addButton获取按钮:button设置是否互斥,实现单选或者多选:setExclusive信号获取点击的按钮ID:buttonClicked(int id)。。。三:例程......原创 2022-06-07 23:15:00 · 1843 阅读 · 0 评论 -
Qt开发之路57---判断字符串是否为纯英文、纯数字、纯中文
一:判断是否为纯英文bool IsEnglish(QString str){ QByteArray ba = str.toLatin1(); const char *ch = ba.data(); while (*ch) { if((*ch >= 'A' && *ch <= 'Z')||(*ch >= 'a' && *ch <= 'z')){ }else { retu原创 2022-05-17 20:00:00 · 1854 阅读 · 1 评论 -
Qt开发之路56---QLineEdit限制整数输入范围
一:QLineEdit限制整数输入范围QIntValidator可以限制QLineEdit的输入范围: QIntValidator* IntValidator = new QIntValidator(); IntValidator->setRange(-10,10); //设置范围 ui->lineEdit->setValidator(IntValidator); ui->lineEdit->setPlaceholderText("请输入-1原创 2022-05-05 20:00:00 · 3003 阅读 · 0 评论 -
Qt开发之路55---QTableView同时(整行)删除被选中的多行
一:设置属性设置为整行选择和多选属性,可通过鼠标拖拽、按下Ctrl或Shift键操作多选 setSelectionBehavior(QAbstractItemView::SelectRows); setSelectionMode(QAbstractItemView::ExtendedSelection);二:获取选中的行通过QModelIndexList selectedIndexes() const 获取选中的列表 QModelIndexList indexList = select原创 2021-11-23 21:15:00 · 2411 阅读 · 0 评论 -
Qt开发之路54---QListView同时删除被选中的多行
一:设置属性设置为多选属性,可通过鼠标拖拽、按下Ctrl或Shift键操作多选 setSelectionMode(QAbstractItemView::ExtendedSelection);二:获取选中的行通过QModelIndexList selectedIndexes() const 获取选中的列表 QModelIndexList indexList = selectedIndexes();三:倒序排列行号通过上述获取的indexList是根据鼠标点击的顺序排列的,是无序的。由于删原创 2021-11-23 21:00:00 · 2045 阅读 · 0 评论 -
Qt开发之路53---pro设置VERSION时,动态库名字总会带数字1
一:问题Qt动态库工程,在pro中设置VERSION = 1.0.0.0时,生成的库名称带数字1;如下图:二:原因当pro中设置VERSION = 1.0.0.0版本号后,qt会自动在程序名后加版本号三:解决方案在pro中添加 CONFIG += skip_target_version_extCONFIG += skip_target_version_ext在Windows下,禁止自动附加在DLL文件名上的版本号。...原创 2021-11-23 20:45:00 · 1460 阅读 · 0 评论 -
Qt开发之路52---给EXE或DLL添加版本信息
一:Visual Studio在Visual Studio中,默认资源里有Version,想要添加版本信息(版本信息、描述、版权等),直接修改,如下图:若没有Version,则在添加资源的时候,选择Version,如下图:二:Qt Creator1.方法一:新建xxx.rc文件,在rc文件填入以下的版本信息;把xxx.rc放在与pro同目录下,并将pro文件的RC_FILE = xxx.rc,然后构建,编译生成的程序就会含有版本信息。#include <windows.h>V原创 2021-11-23 20:30:00 · 2171 阅读 · 0 评论 -
Qt开发之路51---Qt获取字符串的宽与高(像素)QFontMetrics
一:QFontMetrics类QFontMetrics的函数用于计算给定字体的字符和字符串的大小。fontMetrics().width(QString s): 获取字符串s的总像素宽度。fontMetrics().height(): 获取字体的高度。fontMetrics().lineSpacing(): 获取字体的高度,包括文字的实际宽度和行距。fontMetrics().leading(): 行间距二:获取字符串的宽与高QString strText = "test";QFontMet原创 2021-08-28 15:52:11 · 5445 阅读 · 2 评论 -
Qt开发之路50---make时遇到File `Makefile‘ has modification time 5e+05 s in the future
一:问题编译时,提示文件在未来的某个时间被修改了。二:原因文件是从其他地方拷贝过来的系统的时间不对文件被修改的时间大于系统当前的时间三:方法更新系统时间或者对应修改文件重新编译上一篇:Qt开发之路49—类的静态成员(static)编译时,提示无法解析的外部符号...原创 2021-08-28 15:38:38 · 1089 阅读 · 0 评论 -
Qt开发之路49---类的静态成员(static)编译时,提示无法解析的外部符号
一:问题:在类MyWidget.h中定义一个static成员 static double length;当在其他类中引用该成员时MyWidget::length,会提示length无法解析的外部符号。二:原因该静态成员变量没有初始化三:解决方法在MyWidget.cpp中最上方初始化该成员变量double MyWidget::length = 100.0;上一篇:Qt开发之路48—类的静态成员(static)...原创 2021-08-28 15:12:51 · 1654 阅读 · 1 评论 -
Qt开发之路48---类的静态成员(static)
一:关键词static声明静态成员类的静态成员与类直接相关,而不是与类的各个对象相关;直接捆绑在类上;静态成员不含this指针;不能用const二:定义静态成员变量静态成员由于不属于类的任意一个对象,所以不是在创建类的对象时被定义,一般来说,不在类内部初始化静态成员。如下,在类MyWidget 中定义静态成员 length:在mywidegt.h中声明static double length,在mywidegt.cpp文件上方初始化double MyWidget::length = 10原创 2021-08-28 15:05:19 · 2635 阅读 · 0 评论 -
Qt开发之路47---Qt、C++ 判断double 是否为 0
一:判断两个double是否相等浮点数在计算机中并不能精确的表示,所以在判断两个double类型的数时需要其他的手段,而不是直接用==判断。float,double分别遵循R32-24,R64-53的标准。所以float的精度误差在1e-6;double精度误差在1e-15,所以要判断一个单精度浮点数:则是if( abs(f) <= 1e-6);要判断一个双精度浮点数:则是if( abs(f) <= 1e-15 );若小于,为0,大于,不为0 。自己最好的是选择一个合适的精度,来进行判断原创 2021-08-28 12:13:24 · 2751 阅读 · 0 评论 -
Qt开发之路46---Qt Creator运行的时候报exited with code -1073741515错误
一:问题:运行的时候报exited with code -1073741515错误Starting G:\...\debug\BG.exe...G:\...\debug\BG.exe exited with code -1073741510程序编译没有问题,就是在运行的时候无法运行,也无法调试二:方法一般这种情况是因为,项目依赖的库dll的版本不对应;可以用dll查看工具depends.exe,查看所依赖的库;在环境变量中,配置依赖的路径;拷贝依赖文件到可执行文件下;上一篇:Qt开发之路原创 2021-08-24 19:36:08 · 3039 阅读 · 0 评论 -
Qt开发之路45---Qt Creator 选中的文本大小写切换快捷键
选中的文本变小写 :Alt+U选中的文本变大写 :Alt+Shift+U上一篇:Qt开发之路44—Qt Creator 设置移动控件的最小距离原创 2021-08-24 18:52:04 · 655 阅读 · 0 评论 -
Qt开发之路44---Qt Creator 设置移动控件的最小距离
一:问题Qt Creator编辑UI时,按上下左右间移动控件默认最小是10个像素点,可不可以设置小一些?二:方法,配置更改工具-选项-设计师-表单-栅格X/栅格Y,调整大小!如下图三:方法,属性修改在属性列表中,直接指定控件的位置,如下图四:方法,快捷键Ctrl+上下左右键默认,Ctrl+上下左右键,移动1个像素位置上一篇:Qt开发之路43—Qt屏蔽qDebug调试信息...原创 2021-08-23 20:20:30 · 937 阅读 · 0 评论 -
Qt开发之路43---Qt屏蔽qDebug调试信息
一:局部屏蔽如下,在当前文件加宏定义QT_NO_WARNING_OUTPUT 和 QT_NO_DEBUG_OUTPUT #define QT_NO_DEBUG_OUTPUT //屏蔽debug输出 #define QT_NO_WARNING_OUTPUT //屏蔽warning输出 二:全局屏蔽如下,在.pro文件中添加宏定义QT_NO_WARNING_OUTPUT 和 QT_NO_DEBUG_OUTPUT DEFINES += QT_NO_WARNI原创 2021-08-23 19:36:17 · 1023 阅读 · 0 评论 -
Qt开发之路42---Qt全局宏定义
一:在.cpp或者.h文件中宏定义#include <QApplication>#include <QDebug>#define HMI "hmi123"int main(int argc, char *argv[]){ QApplication a(argc, argv); qDebug()<<HMI; return a.exec();}在.cpp文件中定义,#define HMI "hmi123"二:在.pro原创 2021-08-17 20:00:20 · 2617 阅读 · 0 评论 -
Qt开发之路41---使用QtConcurrent::run创建线程,有的线程无法启动的问题
一:现象当我使用QtConcurrent::run创建多个线程时,发现有的线程无法启动。二:测试用下面测试例程发现,QtConcurrent::run创建多线程,相当于在当前线程池中开线程,而系统默认当前线程池支持的最大线程个数为8,所以当线程大于8时,需要排队进入线程池。#include <QApplication>#include <QProcess>#include <QDebug>#include <QThread>#include &原创 2021-08-13 15:13:47 · 1701 阅读 · 0 评论 -
Qt开发之路40---QProcess启动控制台程序不显示窗口问题
一:QProcess启动控制台不显示窗口 QProcess *processRobot_1 = new QProcess(); processRobot_1->start("C:/Users/www/Desktop/BG/Test.exe");此方法启动后,控制台程序Test.exe可以启动,但无法显示dos窗口。二:通过“cmd.exe”启动 QProcess *processRobot_1 = new QProcess(); processRobot_1->sta原创 2021-08-10 15:19:09 · 6837 阅读 · 3 评论 -
Qt开发之路39---Qt pro项目检测编译器版本(64位或32位)
方案一:利用QT_ARCHcontains(QT_ARCH, x86_64){ message("64-bit")}else{ message("32-bit")}Qt5可以使用QT_ARCH来检测您的配置是32还是64。如果目标是32位,则返回i386,如果目标是64位,则返回值为x86_64。方案二:利用QMAKE_HOST.archwin32 { contains(QMAKE_HOST.arch, x86_64) { message原创 2021-08-09 19:55:39 · 3887 阅读 · 0 评论 -
Qt开发之路38---Qt Creator修改ui文件编译无效问题
一:清除、重新编译1.重新执行qmake,清理项目,重新构建项目;2.把build目录下所有编译过程生成的文件全部删除,只保留目录结构,再重新构建项目;3.把工程目录下的.user文件删除,只保留工程文件、头文件、源文件、UI文件,然后重新运行qt creator,重新配置项目,再进行编译。二:检测系统时间检查一下系统时间是否正确,因为编译的时候会检查文件的最后修改时间,如果时间不对可能导致编译系统不编译修改后的文件。三:影子工程勾选shadow build,将工程目录下的ui_xxxxx.h原创 2021-08-09 19:23:12 · 1516 阅读 · 0 评论 -
Qt开发之路37---QT creator中Debug、Profile、Release的区别
一:DebugDebug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。二:ReleaseRelease 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。三:Profileprofile则是在这两种之中取一个平衡,兼顾性能和调试, 可以类似的看做是性能更优但是又方便调试的版本。上一篇:Qt开发之路36—设置线程优先级QThread...原创 2021-08-09 19:08:49 · 1814 阅读 · 0 评论 -
Qt开发之路36---设置线程优先级QThread
一:Qt的线程优先级QThread::IdlePriority 0 scheduled only when no other threads are running.QThread::LowestPriority 1 scheduled less often than LowPriority.QThread::LowPriority 2 scheduled less often than Normal原创 2021-08-09 18:20:38 · 4510 阅读 · 0 评论 -
Qt开发之路35---设置程序(进程)优先级 SetPriorityClass
一:函数设置进程优先级BOOL WINAPI SetPriorityClass( __in HANDLE hProcess, // 设置进程句柄 __in DWORD dwPriorityClass // 设置进程优先级);二:参数1:hProcess当前进程的句柄,可以通过GetCurrentProcess()获取;2:dwPriorityClass进程优先级;宏定义意义IDLE_PRIORITY_CLASS 0x00000040原创 2021-08-09 14:31:55 · 2975 阅读 · 1 评论 -
Qt开发之路34---QProcess重定向子进程的日志输出
一:获取子进程的日志输出,输出到主进程 QString appRootPath = qApp->applicationDirPath(); QProcess *process = new QProcess(); process->setWorkingDirectory(appRootPath + "/BG/"); process->start(appRootPath + "/BG/TestApp.exe"); QObject::connect(原创 2021-08-09 14:28:25 · 1717 阅读 · 0 评论 -
Qt开发之路33---启动外部进程QProcess
一:阻塞式启动 execute QProcess *myProcess = new QProcess(); myProcess->execute("TestQt.exe");execute 方法以堵塞方式执行程序,直到程序退出。阻塞调用,当前窗口处理结束关闭之后,主窗口才能操作。二:非阻塞式 start() 和 startDetached() QProcess *myProcess = new QProcess(); myProcess->start("T原创 2021-08-09 14:24:29 · 1279 阅读 · 0 评论 -
Qt开发之路32---Qt C++ 控制台程序 windows console 快速编辑模式 关闭
一:现象win10系统下,鼠标点击控制台程序,该程序会被阻塞卡死。二:原因右键控制台,选择属性,如下图所示windows Powershell 分快速编辑模式和标准模式. 当处于快速编辑模式时, 鼠标点击控制台会导致该程序被阻塞. 且系统默认情况下,是快速编辑模式。三:方法1.通过手动去掉上图勾选项:快速编辑模式、插入模式2.通过代码,自动设置控制台属性 //修改窗口属性 HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);原创 2021-08-09 14:22:53 · 865 阅读 · 0 评论 -
Qt开发之路31---Qt程序自动打包
Qt的应用程序编译出来之后,将单独的exe程序拿到其他PC上运行是运行不起来的,会提示缺少对应的动态链接库。我们需要去Qt的安装目录下找到所有的Qt程序运行时所依赖的,将他们和exe程序放到同一目录下,程序才可以执行。Qt给我们提供了一个寻找依赖项的工具windeployqt。Windeployqt的使用方法:如果我们一件配置好了环境变量,在dos下输入windeployqt会有相应的信息输出,否则需要指定该工具的完全路径才能够正常使用,例如:D:\Qt\Qt5.8.0_msvc2013\5.8\原创 2021-08-02 19:51:40 · 473 阅读 · 1 评论 -
Qt开发之路30---4种常用的多线程实现方式
一:继承Qthread方法: 继承自QThread类,重写run函数,通过start启动线程。此实现方法只有run函数内的代码是运行在子线程内。例程:#ifndef MYTHREAD_H#define MYTHREAD_H#include <QThread>class MyThread: public QThread{ Q_OBJECTpublic: MyThread(); ~MyThread();protected: void ru原创 2021-08-02 19:49:15 · 745 阅读 · 4 评论 -
Qt开发之路29---UDP 与 TCP区别(Socket通信)
一 UDP(用户数据报协议)-短信:1、只管发送,不确认对方是否接收到2、将数据及源和目的封装成数据包中,不需要建立连接3、每个数据包的大小限制在64K之内4、因为无需连接,因此是不可靠协议5、不需要建立连接,速度快应用场景: 视频直播,游戏LOL二 TCP(传输控制协议):1、建立连接,形成传输数据的通道2、在连接中进行大数据传输(数据大小不收限制)3、通过三次握手完成连接,是可靠协议,安全送达4、必须建立连接,效率会稍低区别:TCP/IPUDP是否连接面原创 2021-02-27 14:05:51 · 419 阅读 · 0 评论 -
Qt开发之路28---TCP 连接的“ 三次握手 ”与“ 四次挥手 ” (Socket通信)
一:三次握手三次握手即TCP连接的建立:握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段。随后开始“三次握手”如上图:首先客户端向服务器端发送一段TCP报文,随后客户端进入SYN-SENT阶段。服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文,随后服务器端进入SYN-RCVD阶段。客户端接收到来自服务器端的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SE原创 2021-02-27 13:55:45 · 522 阅读 · 0 评论 -
Qt开发之路27---UDP (Socket通信)
一:UDP使用Qt提供的QUdpSocket进行UDP通信。在UDP方式下,客户端并不与服务器建立连接,它只负责调用发送函数向服务器发送数据。类似的服务器也不从客户端接收连接,只负责调用接收函数,等待来自客户端的数据的到达。在UDP通信中,服务器端和客户端的概念已经显得有些淡化,两部分做的工作都大致相同:创建套接字绑定套接字在UDP中如果需要接收数据则需要对套接字进行绑定,只发送数据则不需要对套接字进行绑定。通过调用**bind()**函数将套接字绑定到指定端口上。接收或者发送数据接收数据原创 2021-02-27 13:32:47 · 571 阅读 · 0 评论 -
Qt开发之路26---TCP/IP (Socket通信)
一:流程在Qt中实现TCP/IP服务器端通信的流程:创建套接字;将套接字设置为监听模式;等待并接受客户端请求;可以通过QTcpServer提供的void newConnection()信号来检测是否有连接请求,如果有可以在对应的槽函数中调用nextPendingConnection函数获取到客户端的Socket信息(返回值为QTcpSocket*类型指针),通过此套接字与客户端之间进行通信。接收或者向客户端发送数据;接收数据:使用read()或者readAll()函数发送数据:使用writ原创 2021-02-27 12:29:15 · 764 阅读 · 2 评论 -
Qt开发之路25---Socket通信
Qt中提供的所有的Socket类都是非阻塞的。Qt中常用的用于socket通信的套接字类:QTcpServer用于TCP/IP通信, 作为服务器端套接字使用QTcpSocket用于TCP/IP通信,作为客户端套接字使用。QUdpSocket用于UDP通信,服务器,客户端均使用此套接字。Socketket是什么呢?Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后.原创 2021-02-27 11:01:04 · 655 阅读 · 0 评论 -
Qt开发之路24---绘图设备(QPixmap、QBitmap、QImage、QPicture)
一:绘图设备绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。QPixmap专门为图像在屏幕上的显示做了优化;QBitmap是QPixmap的一个子类,它的色深限定为1,可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap;QImage专门为图像的像素级访问做了优化;QPicture可以记录和重现QPainter的各条命令。二:QPixmap原创 2021-01-04 14:15:25 · 444 阅读 · 0 评论 -
Qt开发之路23---绘图 QPainter
一:绘图系统Qt 的绘图系统使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类。QPainter用来执行绘制的操作;QPaintDevice是一个二维空间的抽象,允许QPainter在其上面进行绘制,也就是QPainter工作的空间;QPaintEngine提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口。QPaintEngine类应用于QPainter和QPaintDevice之间。我原创 2020-12-29 20:28:19 · 386 阅读 · 0 评论 -
Qt开发之路22---文本文件读写 QTextStream
一:概述上一节介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。而文本文件是一种人可读的文件。为了操作这种文件,我们需要使用QTextStream类。QTextStream和QDataStream的使用类似,只不过它是操作纯文本文件的。QTextStream会自动将 Unicode 编码同操作系统的编码进行转换,这一操作对开发人员是透明的。它也会将换行符进行转换,同样不需要自己处理。QTextStream使用 16 位的QChar作为基础的数据存储单位,同样,它也支持 C++ 标准类原创 2020-12-29 11:47:05 · 992 阅读 · 0 评论