
Qt编程
文章平均质量分 65
分享Qt编程知识及问题解决。
kupeThinkPoem
这个作者很懒,什么都没留下…
展开
-
Qt::MouseButtons解析
Qt::MouseButton 是 Qt 框架中定义的一个枚举类型(enum),用于表示鼠标事件中的物理按钮。Qt::MouseButtons 是 QFlags<Qt::MouseButton> 的类型别名,支持按位或(|)操作组合多个枚举值。qDebug() << "左键拖动中... 坐标:" << event->pos();例如:Qt::LeftButton | Qt::RightButton 表示同时按下左键和右键。qDebug() << "按下左键";qDebug() << "按下右键";原创 2025-02-21 15:59:31 · 515 阅读 · 0 评论 -
QFlags解析
2 组合操作:支持按位或 (`|`)、与 (`&`)、异或 (`^`)、取反 (`~`) 等运算符,简化标志位的组合与操作。// 同时设置 FlagA 和 FlagB。if (flags & FlagA) { // 检查 FlagA 是否设置。// 切换 FlagA 的状态。setFlag(Flag, bool)`: 设置或清除标志。原创 2025-02-21 14:55:06 · 400 阅读 · 0 评论 -
0x0000007b应用程序错误解决2
Qt 5.9.3 是 Qt 5 系列的一个较旧版本(发布于2017年),其模块结构与其他 Qt 5 版本基本一致。以下是 Qt 5.9.3 中的主要模块及其功能概述。今天将自己的qt程序部署到其他电脑上,发生了0x0000007b应用程序错误,啥原因呢?-基于 QML 的声明式 UI 框架,用于构建现代动态界面。核心模块(基础功能)原创 2025-02-18 19:43:02 · 430 阅读 · 0 评论 -
“QWidget: Must construct a QApplication before a QWidget“
如果您的应用程序已经有了 QApplication 对象,而且在创建 QWidget 之前已经正确创建和设置了 QApplication 对象,请确保不要重复创建 QApplication 对象。在这种情况下,可能是由于代码逻辑问题导致重复创建了 QApplication 对象。在包含 QWidget 相关的头文件之前,确保先包含 QApplication 的头文件。1、要解决这个错误,您需要在创建 QWidget 之前先创建 QApplication。原创 2024-11-28 16:40:48 · 640 阅读 · 0 评论 -
Qt菜单折叠起来问题解决
原因是使用QFont时,使用的是点阵pointSize的构造函数或者使用的是setPointSize函数。使用pointsSize构造是实际的物理尺寸,会受dpi的影响。使用SetPixelSize函数,使用实际的像素数量。在不考虑dpi适配的应用程序,还是使用SetPixelSize比较合适,避免界面出现折叠灯等错误。在linux上正常运行的qt程序,重新编译到Windows上运行,发现整个菜单都折叠起来了。环境:win7系统,qt5.9.3。原创 2024-10-14 15:33:41 · 518 阅读 · 0 评论 -
std::string与QString的异同
std::string和QString之间的主要区别之一是它们对Unicode的支持。它在功能上类似于std::string,但提供了额外的功能,如Unicode支持、隐式共享和引用计数。std::string使用连续的内存块来管理其内存,而QString使用隐式共享和引用计数来管理其内存。在用法方面,std::string更常用于标准C++应用程序,而QString更常用于Qt应用程序。std::string和QString都是C++中的字符串类,但它们在功能和用法上有一些不同。转载 2023-08-23 18:12:12 · 833 阅读 · 0 评论 -
QVariant源码解析
Qt会现在types这个数组里面查找name,是否有,如果没有(最后一个0也是个标志位),再到customeTypes里面找,依然没有找到,就往ct里面append一个,ct就是存储custometypes的vector了。好了,这基本上就是qRegisterMetaType的一个思想了,存储了Qt自带的类型(types这个全局变量的数组(types是static类型的,即内部链接的),自定义类型在custometypes里面。// 定义一个构造函数,接受参数T*的值,返回void*转载 2023-08-23 16:15:29 · 414 阅读 · 0 评论 -
Qt共享内存实现进程间消息队列
在Qt 5.9中,可以使用Qt的跨进程通信机制来实现进程间的消息队列。请注意,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。另外,Qt还提供了其他跨进程通信的机制,如QtDBus和QtRemoteObjects,你也可以根据实际情况选择使用。这样,服务器端就可以接收到客户端发送的消息,并进行处理。注意,服务器端和客户端都需要连接到相同的共享内存和信号量。首先,你需要创建一个消息队列的服务器端和客户端。服务器端负责接收和处理消息,客户端负责发送消息。// 连接到共享内存和信号量。原创 2023-06-20 18:11:35 · 2637 阅读 · 0 评论 -
Qt支持c++11
Qt4版本下仅Qt4.7与Qt4.8支持C++11,在pro文件添加以下代码即可:Qt5版本以上添加以下代码:原创 2023-05-19 18:10:56 · 1157 阅读 · 0 评论 -
QHash存储std::string
QHash是Qt中的哈希表数据结构,它可以存储键值对,并且能够快速根据键查找对应的值。QHash的实现基于开链法,即将哈希冲突的元素以链表的形式存储在同一个桶中。QHash的使用非常简单,可以通过下标运算符[]或insert()方法向其中插入键值对,也可以通过value()方法获取指定键对应的值。例如:需要注意的是,QHash中的键值对是无序的,并不能保证插入顺序就是遍历顺序。原创 2023-03-29 14:22:25 · 559 阅读 · 0 评论 -
Qt序列化使用方式3-QDataStream和QByteArray
QDataStream和QByteArray都是Qt中用于序列化和反序列化数据的类。QDataStream可以将Qt数据类型(如QString、QByteArray等)和自定义数据类型序列化为二进制格式,并写入文件或网络流中。同时,也可以从文件或网络流中读取二进制数据并反序列化成相应的数据类型。QByteArray则是一个动态数组,可以方便地存储二进制数据。它提供了一些方法来访问和操作字节数组中的数据,例如append()、at()、mid()等。原创 2023-03-29 06:55:21 · 3785 阅读 · 0 评论 -
Qt序列化使用方式2-QDataStream
QDataStream可以将Qt数据类型(如QString、QByteArray等)和自定义数据类型序列化为二进制格式,并写入文件或网络流中。原创 2023-03-29 06:40:57 · 471 阅读 · 0 评论 -
Qt序列化使用方式1
QDataStream可以将Qt数据类型(如QString、QByteArray等)和自定义数据类型序列化为二进制格式,并写入文件或网络流中。QJsonDocument则可以将JSON格式的数据序列化为Qt数据类型(如QVariant、QJsonObject等)。Qt提供了多种序列化方式,常用的包括:QDataStream和QJsonDocument。原创 2023-03-29 06:37:24 · 413 阅读 · 0 评论 -
Qt SQLite数据库多线程的使用方式3
在需要使用多线程读写数据库的场景中,可以考虑使用Qt的信号槽机制,将数据库操作放到独立的线程中执行。具体地,在子线程中创建新的数据库连接并操作数据库(同样可以使用。等类),将查询结果或操作结果通过信号/槽机制传递回主线程并更新UI界面。// 将主窗口与DBThread线程的信号/槽连接起来。// 启动一个新的线程执行数据库操作。// 在子线程中打开数据库连接。// 在子线程中执行数据库操作。// 在子线程中关闭数据库连接。// 在主线程中更新UI界面。// 新建一个线程类,用于执行数据库操作。原创 2023-03-25 10:34:00 · 4240 阅读 · 0 评论 -
QT 实现图片旋转及缩放
Qt可显示基本的图像类型,利用QImage、QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放、旋转)。1、Qt可显示的图像类型参考Qt的帮助文档,可支持的类型,即可以直接读取并显示的格式有BMP、GIF、JPG、JPEG、PNG、TIFF、PBM、PGM、PPM、XBM、XPM。2. Qt用如何显示图像通常用QLabel显示图像,QLabel类有setPixmap()函数,可以用来显示图像。也可以直接用QPainter画出图像。原创 2022-12-08 21:56:18 · 4072 阅读 · 0 评论 -
Qt4和Qt5中文乱码问题的解决
Qt4升级到Qt5由于setCodecForLocale(), setCodecForCStrings()和setCodecForTr()函数无法使用会带来一些乱码的问题。原创 2022-11-05 22:11:51 · 1833 阅读 · 0 评论 -
Qt资源使用的方式
第一种方法相当于静态加载,但很多情况下我们更希望是动态加载,亦即:用到哪个资源才将该资源加载进来,而不用的则不加载。上边第一种方法之 所以显示出静态加载的特性,这是由于系统一次性自动把所有图片资源都进行了注册,并且在程序运行过程中一直没有进行反注册才导致的。如果我们可以自行决定:什么时候对那一部分图片资源进行注册?什么时候对哪一部分图片资源进行反注册。则显然我们可以手动控制整个资源在内存中的生存周 期。图片是一种资源,而在Qt中,对于资源的使用是有独特的方式的。原创 2022-10-23 21:02:19 · 2376 阅读 · 0 评论 -
C++可视化和图表库
圆形图表(饼状图),圆环图,柱形图(条形图),直线图,曲线图,梯级线图,趋势线图,曲线拟合图,线间色图,区域图,散布图(散形图),泡沫图,floating box,box-whisker,瀑布图,金融类图表,甘特图表,向量图,雷达图,极线图,rose,XY轴交换(旋转图表)和3D效果等效果。广泛的图表类型- 饼图、甜甜圈、条形图、直线、样条曲线、阶梯线、趋势线、曲线拟合、线间填充、区域、带、散点、气泡、浮动框、盒须、瀑布、轮廓、热图、表面、矢量、金融、甘特图、雷达、极地、玫瑰、金字塔、锥体和漏斗。原创 2022-09-17 21:59:28 · 15279 阅读 · 5 评论 -
Qt4.8.4和Echarts5.3.3进行绘图
ECharts,商业级数据图表,它是一个纯JavaScript的图标库,常用的图表形式,如折线图、柱状图,饼状图、雷达图等,都可绘制,而且效果好看。这是做Web前端的,经常会用到的工具。这里我就不细说ECharts,一则这个官网教程很详细,再则我也是个门外汉,只会简单的。而Qt要显示web部分的东西,肯定是要用到QtWebkit(Qt4)或者 QtWebEngine(Qt5),这个视版本而定。原创 2022-09-17 21:06:21 · 881 阅读 · 0 评论 -
Windows下QT实现托盘程序及系统托盘刷新
windows下当程序关闭,有时系统右下角的系统托盘图标还会存在。如不停的关闭和打开程序,任务栏右下角通知区域,同一个图标重复很多。Qt使用QSystemTrayIcon类开发时,也会存在这个问题。方法是调用windows API。.........原创 2022-08-04 20:53:10 · 1894 阅读 · 0 评论 -
Qt之moc,uic,rcc命令的使用
对于太大的图片、音频、视频等文件,不适合集成到目标程序内部,可以放到操作系统文件路径,或者单独编译成外挂资源*.rcc。rcc会把myresource.qrc里面描述的所有图片、视频等文件,都压缩打包,生成一个二进制的myresource.rcc文件,这个myresource.rcc包含了所有的资源,这样程序发布时就不需要带一堆乱七八糟的碎文件了,一个myresource.rcc搞定。其中app.ui是用designer设计好的界面文件,ui_app.h是生成的头文件。...转载 2022-07-21 22:27:21 · 2025 阅读 · 0 评论 -
Qt界面UI文件的使用与界面继承问题
QT的UI如何加入到程序中来?xxx.ui文件是一个xml文件,描述了ui属性,包括ui路径,名称,尺寸等信息,这个文件可由ui设计工具qtdesigner生成;但是要想在程序中使用ui,需要通过uic.exe和xxx.ui生成一个ui_xxx.h文件。cmd中cd到xxx.ui所在的路径,输入uic.exexxx.ui-oui_xxx.h。可以使用不同的ui文件进行界面代码的继承,然后将ui.setupUI(this)写到一个虚函数中去。...原创 2022-07-21 22:22:31 · 4919 阅读 · 0 评论 -
Sqlite数据库存储目录结构邻接表的实现2-目录树的构建
目录 一、概述二、数据库存储目录结构邻接表三、数据结构四、目录树的构建 存储目录结构(树)是一个常见的问题,有多种解决方案。方法主要有邻接表、进阶邻接列表、改进的前序树遍历、递归查询、枚举路径、嵌套集、闭包表等。 我们将尝试的第一种也是最优雅的方法叫做“邻接表模型”或“递归方法”。这是一个很好的方法,因为你只需要一个简单的函数来遍历你的树。在我们的食品商店中,邻接表看起来像这样: 如你所见,在邻接表方法中,你保存了每个节点的“父节点”。我们可以看到‘Pear’是原创 2022-07-05 07:12:20 · 1079 阅读 · 0 评论 -
QTreeWidget作为单例模式以dll返回的两个问题
目录一、现象二、问题1、Must construct a QApplication before a QPaintDevice2、程序崩溃三、总结 最近写一个Qt的dll,QTreeWiget需要在dll中返回,但是遇到了崩溃等问题。 Releases和DEBUG版本的库混在一起了,虽然他们是不同的名字(Debug版本带个d)。 单例往往是静态全局变量,如果在单例的构造函数里面调用new QTreeWidget,QApplication这时还没有定义。在QAppli原创 2022-06-22 05:45:44 · 253 阅读 · 0 评论 -
Qt的内存管理机制
目录一、概述二、普通C++类三、QObject类及其派生类四、QWidget的内存释放1、使用QObject Parent机制2、设置Qt::WA_DeleteOnClose3、重写QCloseEvent事件五、qDeleteAll和clear六、Qt的智能指针一、概述在Qt中,我们可以大致把对象分为两类,一类是QObject和它的派生类;另一类则是普通的C++类。二、普通C++类普通C++类是正常的生命周期需要用户自己管...原创 2022-05-30 06:11:58 · 1651 阅读 · 0 评论 -
Qt QCloseEvent中delete this的bug
目录一、现象二、解决方法三、原理1、概述2、源码3、分析四、总结一、现象最近修改别人代码时,发先在QCloseEvent中delete this 的代码会发生崩溃现象。void MyWidget::closeEvent(QCloseEvent *event)//此函数在QWidget关闭时执行{ delete this;//会发生崩溃}二、解决方法 使用deletelater函数解决void MyWidget::closeE...原创 2022-05-30 05:32:26 · 949 阅读 · 0 评论 -
QTcpServer 服务端处理多个客户端2-InComingConnection方式
目录一、QTcpServer二、QTcpSocket三、incomingConnection四、QTcpServer 服务端处理多个客户端1、客户端2、服务器(1)、服务器server(2)、服务器线程(3)、服务器socket一、QTcpServer QTcpServer用于接收到来的TCP连接。端口号即可指定,也可由QTcpServer自动选取一个。既可在设备上指定的IP地址上监听,也可在设备上所有IP地址上监听。调用Listen()让服...原创 2022-05-23 21:13:45 · 3539 阅读 · 4 评论 -
使用QT中QTcpSocket中的readall()函数出现接收不完全的解决办法
目录一、问题二、解决方案1、发送端:2、接收端3、分析一、问题 最近在QT中使用TCP协议发送数据过程出现了一点问题,在这里总结一下。当接受数据过大时,使用readll()函数读取缓冲区数据时,有时会出现数据接受不完全的信号,最开始我以为是数据丢包,后面多次实验后发现是readall()函数未将缓冲区数据读取完全,读取数据流获取数据的方法还是没有readall()函数使用方便,所以,我们就从发送数据的地方着手修改,建立一个数据报。二、解决方案1、...转载 2022-05-03 00:02:50 · 6969 阅读 · 0 评论 -
QTcpServer 服务端处理多个客户端1-newConnection方式
目录一、QTcpServer二、QTcpSocket三、QTcpServer 服务端处理多个客户端1、创建监听套接字的QTcpSever2、listen------监听是否有新的连接进来 3、newConnection信号处理函数NewConnectionHandle中的处理4、客户端连接5、客户端发送数据一、QTcpServerThe QTcpServer class provides a TCP-based server.This class m...原创 2022-05-02 23:31:47 · 4054 阅读 · 0 评论 -
QT操作Sqlite数据库修改字段名称和删除字段
Sqlite 不支持直接修改字段的名称。我们可以使用别的方法来实现修改字段名。1、修改原表的名称ALTER TABLE table RENAME TO tableOld;2、新建修改字段后的表CREATE TABLE table(ID INTEGER PRIMARY KEY AUTOINCREMENT, Modify_Username text not null);3、创建索引4、从旧表中查询出数据 并插入新表 INSERT INTO table SELECT ID,.原创 2022-04-30 20:10:46 · 4396 阅读 · 1 评论 -
Qt多线程操作Sqlite数据库2-多线程操作不同的连接
目录一、QSqlDatabase概述二、QSqlDatabase模块的使用三、多线程操作不同的链接1、testsqldatabase.cpp2、thread1.cpp3、thread2.cpp四、总结一、QSqlDatabase概述 QSqlDatabase提供了一系列的接口用于访问操作数据库,包括连接数据库,输入sql语句等。QSqlDatabase的实例表示着一个对数据库的连接。该连接通过一个受支持的数据库驱动程序(从QSqlDriver派生...原创 2022-04-27 22:13:25 · 1464 阅读 · 0 评论 -
Qt多线程操作Sqlite数据库1-多线程操作同一个连接
一、QSqlDatabase概述 QSqlDatabase提供了一系列的接口用于访问操作数据库,包括连接数据库,输入sql语句等。QSqlDatabase的实例表示着一个对数据库的连接。该连接通过一个受支持的数据库驱动程序(从QSqlDriver派生)提供对数据库的访问。另外,可以从QSqlDriver子类化自己的数据库驱动程序。(如何创建自己的驱动,详见其他文档)Qt支持的数据库有很多,自己首先接触到的是QODBC(用于sql server)。另外还有QSQLITE、QDB2、QIB...原创 2022-04-26 22:44:09 · 5671 阅读 · 2 评论 -
Qt vs2010开发环境搭建
Qt4.8.4:Index of /archive/qt/4.8/4.8.4https://download.qt.io/archive/qt/4.8/4.8.4/QCreator:Index of /archive/qtcreator/2.8/2.8.0https://download.qt.io/archive/qtcreator/2.8/2.8.0/Qt vs tool:Index of /development_releases/vsaddin/1.2.3https://download原创 2022-03-10 11:22:51 · 1959 阅读 · 0 评论 -
windows10下qt5.13.2安装及添加源码调试
系统环境:windows10一、下载Index of /archive/qt/5.13/5.13.2https://download.qt.io/archive/qt/5.13/5.13.2/qt-opensource-windows-x86-5.13.2.exe二、安装1、账号登陆 双击应用程序弹出账号登陆,如果有账号可以直接登录,没有的话直接在下面注册即可。2、选择组件 不断next会弹出选择组件对话框,安装都选上需要20个G左右,如果想要源码...原创 2021-12-12 17:01:43 · 6080 阅读 · 0 评论 -
Qt事件循环及QEventLoop的使用
一、 Qt的事件循环 Qt作为一个跨平台的UI框架,其事件循环实现原理, 就是把不同平台的事件循环进行了封装,并提供统一的抽象接口。和Qt做了类似工作的,还有glfw、SDL等等很多开源库。二、QEventLoop类QEventLoop即Qt中的事件循环类,主要接口如下:int exec(QEventLoop::ProcessEventsFlags flags = AllEvents)void exit(int returnCode = 0)bool isRunning...原创 2021-12-09 21:56:43 · 22262 阅读 · 7 评论 -
QComboBox实现下拉框check勾选
目录1、前言2、思路3、代码1、头文件2、cpp文件3、main4、实现效果1、前言 QComboBox每次只能选择一个,现项目中需要可以多次勾选。想实现一个带check功能的QComboBox,保持QComboBox风格,不另行设置界面。2、思路 利用Qt::CheckStateRole进行实现,下面列举一些Qt::ItemDataRole。Constant Value Description Qt::FontRo...原创 2021-12-02 22:33:49 · 1984 阅读 · 0 评论 -
Qt addToolBar函数
addToolBar函数会将toolbar的父指针设置为main window.原创 2021-12-02 15:02:35 · 1047 阅读 · 0 评论 -
QT支持Mysql环境配置
环境:win7,qt4.7.4,mysql5.5最近研究mysql数据库,Qt来做界面。需要Qt访问mysql数据库。下面是实现步骤一、编译mysql驱动1、打开vs命令提示符2、输入:cd E:\dstw\qt-everywhere-opensource-src-4.7.4\src\plugins\sqldrivers\mysql>3、输入:qmake -o Makefile原创 2013-11-20 18:00:07 · 2910 阅读 · 0 评论 -
创建多个叠加的QDockWidget
今天使用tabifyDockWidget进行多个QDockWidget叠加时,出现了一些问题,原理是叠加顺序没有弄好。tabifyDockWidget的定义为:void QMainWindow::tabifyDockWidget ( QDockWidget* first, QDockWidget * second )Moves second dock widget on top o原创 2014-01-24 15:27:04 · 5638 阅读 · 0 评论 -
fatal error C1083: Cannot open include file: 'qwtplot.h':
fatal error C1083: Cannot open include file: 'qwtplot.h': No such file or directory解决方法:修改'qwtplot.h'为'qwt_plot.h'。原创 2014-02-25 21:20:49 · 3298 阅读 · 1 评论