Qt开发
文章平均质量分 57
记录Qt的开发的一些学习知识和开发体会以及经验。
很多是记录一些学习的轨迹。
零点零一
Make it right before you make it faster. Keep it right when you make it faster. Make it clear before you make it faster. Do not sacrifice clarity for small gains in efficiency. -- Brian Kernighan
展开
-
QT的工程文件解读
如果 `qtsingleapplication-uselib` 宏未定义,或者 `qtsingleapplication-uselib` 宏定义为0,则执行 `{...}` 中的语句;`QT += module`是表示链接Qt模块库的操作,而`QT *= network`是附加一个值到QT宏中,即添加网络模块到原有的QT值中,其效果和`QT += network`相同,只是两种写法的语法略有不同。寻找更优解,在Qt中,QT宏定义作为Qt库的主要组成部分,用于头文件包含、链接库依赖和QT宏的定义等。原创 2023-06-12 14:56:51 · 937 阅读 · 0 评论 -
QT Qprocess封装线程执行
同时,使用信号和槽连接OutputReady信号和槽函数来实现实时输出程序的输出内容。为了避免在主线程中执行比较耗时的操作,可以使用Qt的线程模型将MyProcess这个类运行在单独的线程中。这样便实现了将MyProcess类的执行过程移动到一个单独的线程中,实现了线程的分离和异步执行,提高了程序在多核CPU上的执行效率,同时避免了在主线程中执行比较耗时的操作导致程序阻塞。我们将MyProcess类继承QObject并重载了它的`run()`函数,将程序的启动和等待的操作都放在了这个函数里面。原创 2023-06-08 14:17:32 · 693 阅读 · 0 评论 -
linux环境下QT使用QProcess 关闭程序
stopProcess()方法会先发送SIGTERM信号终止进程,然后等待进程完全终止。如果不调用waitForFinished(),那么可能会导致进程没有完全终止就被关闭。在Ubuntu中可以使用kill命令来终止进程。为了在Qt代码中使用kill命令,可以通过继承QProcess类来实现。这里使用了自定义的MyProcess类继承QProcess,并添加了stopProcess()方法来实现终止进程的功能。调用第三方程序,调用完后需要终止。//调用需要终止的程序。// 发送SIGTERM信号。原创 2023-06-08 13:39:33 · 4928 阅读 · 0 评论 -
Qt扫盲-QProcess理论总结
然后,你可以调用write()来写入进程的标准输入,并调用read()、readLine() 和 getChar() 来读取标准输出。finished()信号提供了进程的退出代码和退出状态作为参数,你还可以调用exitCode()来获得最后一个已经完成的进程的退出代码,调用exitStatus()来获得它的退出状态。如果在任何时间点发生错误,QProcess将发出erroroccurs()信号。你还可以调用error()来查找上次发生的错误类型,调用state()来查找当前进程的状态。转载 2023-06-08 11:20:32 · 870 阅读 · 0 评论 -
Qt 项目文件Pri详解
在Qt中,Pri文件是一种项目文件,用于将C++代码、JavaScript文件、资源文件等链接在一起,并生成可执行文件。Pri文件中可以定义编译规则、链接规则、生成规则、部署规则等等,通过使用不同的变量和函数,来实现各种复杂的构建流程和部署流程。Pri文件是基于Makefile语法的,因此需要使用一定的Makefile知识。原创 2023-06-03 15:22:21 · 8000 阅读 · 0 评论 -
valgrind基本功能介绍、基础使用方法说明
拷贝效果不好,请看原文。1、Valgrind概述Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。原创 2023-06-01 17:38:48 · 1614 阅读 · 0 评论 -
Qtcreator 创建 新文件时名字大小写的设置
Qtcreator 创建 新文件时名字大小写的设置。原创 2023-05-30 14:11:02 · 718 阅读 · 0 评论 -
在ubuntu系统,用QTestLib 做Qt单元测试,请给我一个入门的教程例子
QTest::qExec()` 函数的第一个参数是测试类的指针,指向我们的测试类的对象 `test`,第二个和第三个参数是 `main()` 函数的标准参数。`QTest::qExec()` 函数的第一个参数是测试类的指针,指向我们的测试类的对象 `test`,第二个和第三个参数是 `main()` 函数的标准参数。我们可以在测试开始前使用 `setUp()` 函数设置测试环境,在测试结束后使用 `tearDown()` 函数清除测试环境。// 运行所有测试用例。// 定义测试结束后的函数。原创 2023-04-19 10:37:19 · 1023 阅读 · 0 评论 -
基于 Ubuntu 系统使用 Google Test 框架编写 Qt C++ 单元测试的详细教程
然后,将测试代码目录添加到编译目标中,并链接Google Test库文件(注意:链接库文件时需要添加`-pthread`参数)。在 Qt Creator 中创建一个新的控制台应用程序项目,名称为 `MyTest`,目标文件类型选择`Relaese`, 填写好项目的相关信息和路径,创建项目后在项目根目录下创建名为 `test` 的子目录,用于存放测试代码和测试数据。在 `test` 目录下创建一个新的 C++ 文件 `mytest.cpp`,编写测试代码。# 添加 Google Test 框架库文件目录。原创 2023-04-19 10:26:54 · 747 阅读 · 0 评论 -
在linux系统,用QT开发环境,C++语言,做共享库工程如何做?
在完成共享库的开发后,您可以将其部署到其他应用程序中,并在需要时动态加载它。为此,您需要将生成的共享库文件放置在适当的文件夹中,并将相应的链接选项添加到应用程序的编译器选项中。注意,生成的共享库文件需要放置在指定的路径下,并在需要使用该库的程序中通过编译选项将其链接到程序中。1. 打开QT Creator,选择“新建项目”,在“非QT项目”下选择“库”;3. 在弹出的对话框中填写库的基本信息,如库的名称、版本号、作者等。2. 选择您想要创建的共享库类型,例如:动态共享库或静态共享库。原创 2023-04-19 10:10:07 · 680 阅读 · 0 评论 -
QT常用全局宏定义 QT定义的一些有用的宏QMessageLogger
#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug#define qInfo QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).info#define qWarning QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_转载 2023-04-06 10:34:57 · 152 阅读 · 0 评论 -
QT下的线程池的使用方法
最后提一点就是Qt为每个QApplication创建了一个线程池对象,通过QThreadPool的静态成员函数globalInstance()可以获得这个对象。是的因为这个线程池的最大线程数是4。线程池维护一定数量的线程,并充分使用它们。Qt封装的线程池类是QThreadPool,它的使用需要QRunnable来配合。但线程也不是创建越多越好,因为创建、销毁线程以及切换线程都是需要消耗资源的。2.调用QThreadPool的start()开始工作,start的参数就是子类化QRunnable的指针。转载 2023-03-04 13:28:21 · 1222 阅读 · 0 评论 -
Qt 之 QFileSystemWatcher+封装类
同样,当一个目录或它的内容被修改或删除时,会发射directoryChanged()信号。QFileSystemWatcher检查添加到它的每个路径,已添加到QFileSystemWatcher的文件可以使用的files()函数进行访问,目录则使用directories()函数进行访问。当目录被修改(例如:在指定的路径中添加或删除一个文件)或从磁盘删除时,这个信号被发射。然而,变化的序列中的最后的变化总会发射这个信号。如果路径存在,则添加至文件系统监控,如果路径不存在或者已经被监控了,那么不添加。转载 2023-02-18 13:48:58 · 413 阅读 · 0 评论 -
QApplication::processEvents的使用
有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态。例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响应用户的任何操作,窗口也不会重新绘制,从而处于“无法响应”状态,这是一个非常糟糕的体验。当我们需要在执行这个耗时程序或函数时不断的刷新界面就可以使用QApplication::processEvents函数,一边执行程序一边刷新界面,就会给人一种很流畅的感觉。,即在子线程中处理文件保存,主线程负责界面相关。转载 2023-01-31 17:26:25 · 3647 阅读 · 0 评论 -
当Qt(C++)中,function成为first-class
我对C++的使用和理解是不断变化的。从一开始的C with Class 到接触到设计模式,才理解了什么叫真正的OOP;从接触到STL才真正正视Template,了解了什么是GP;从Python和Golang的火热中了解了函数作为first-class的力量;从某些文章对Lisp近乎玄学的推崇中知道了FP的优势和它逐渐在主流的编程方式中兴起的原因。C++是包容和自由的,自从学了std::function和lambda之后,我也开始逐渐学着向FP方式转变。转载 2023-01-31 17:14:30 · 228 阅读 · 0 评论 -
QT中宏__FUNCTION__ 之类的作用
今天需要用到debug,想到还得写文字,就想偷个懒,制作了两个宏定义,如下,以后需要的地方直接调用宏定义就好。定义两个的原因是写msg默认值时候,会报错,为了简便,就定义两个。转载 2023-01-31 16:47:58 · 672 阅读 · 0 评论 -
Qt之QtConcurrent无需使用低级线程原语编写多线程
由于两个函数非void函数,但是返回QString在各个方法里面并未出现所以会出现崩溃。不在出现crashed。原创 2023-01-31 16:25:07 · 550 阅读 · 0 评论 -
Qt 只运行一个程序实例的实现技术点
Qt 只运行一个程序实例 -QLockFile -QSystemSemaphore 和 QSharedMemory_mb611488a787387的技术博客_51CTO博客前言每次只运行应用程序的一个实例可能是必要的,以限制内存泄漏的问题,或者消除某些资源,文件,SQLite数据库等应用程序的两个实例之间的竞争问题。或者,原则上,应用程序只需要用户使用一个副本就行了。有两种方法可以用来解决这个问题:1、使用QLockFile当一个临时文件被创建时,当应用程序关闭时清除这个临时文件。因此,在应用程序的第二转载 2022-12-07 15:54:08 · 366 阅读 · 0 评论 -
QT单元测试初探
QT单元测试_疯狂的挖掘机的博客-CSDN博客_qt 单元测试文献还是官方的权威,找到目前用的QT5.15的对应的文档:QT5的官方文档:https://doc.qt.io/qt-5/qttest-index.htmlhttps://doc.qt.io/qt-5/qtest-tutorial.html这个入门的小例子,不是用ide调用的。要用QTCreator运行,点击“tools-》tests-》Run All Tests”执行全部的测试。原创 2022-11-29 20:20:55 · 486 阅读 · 0 评论 -
QT的C++命名空间的使用
现在就很清楚了,这两个看起来名字一样的 Widget 其实是两个类,一个是 namespace Ui 里的,另一个是 namespace Ui 之外的 Widget 类,namespace 声明的类其实就是个空壳,它的基类功能是将此窗口上的所有控件的声明、实例化、初始化。声明的原因就是为了使 ui 布局控制和其他的控制代码分离。/* 使用 namespace 声明 */ namespace UI { class Test: public Base {};看来QT的C++工程也是这么用的。原创 2022-11-29 12:17:04 · 680 阅读 · 0 评论 -
linux环境QT做静态库,QT静态库的创建与使用
最近研究一下静态库的开发;最初学习的资料是:QT静态库的创建与使用(全网最细)_路漫漫其远,吾求索的博客-CSDN博客_qt生成静态库建立一个静态库成功。如果同时打开静态库和运行程序调用,调式模式下,可以进入静态库的内部函数进行调试;原创 2022-11-29 12:04:46 · 1892 阅读 · 0 评论 -
Qt中工程配置中的DEPENDPATH 和 INCLUDEPATH 的区别
根据makefile规则,紧跟在main.o: 后面的文件是编译生成main.o文件时依赖的文件,这个依赖的意思是,如果依赖的文件在main.o文件发生过更改,那么下次编译时main.o需要重新生成,否则无需重新生成增加DEPENDPTH后,Qt会将该目录下所有的头文件加入到每个cpp文件对应的.o文件的依赖文件里,这样如果DEPENDPATH目录里的头文件发生了变化,所有的cpp都会重新编译。在Qt中添加库文件的时候,Qt会自动在pro文件里生成三行配置。没有DEPENDPATH设置。转载 2022-11-29 10:47:22 · 1167 阅读 · 0 评论 -
翻译QT使用手册:将库添加到项目
除了 Qt 库之外,您还可以将其他库添加到您的项目中。您可以添加系统库、您自己的库或第三方库。除了 Qt 库之外,您还可以将其他库添加到您的项目中。您可以添加系统库、您自己的库或第三方库。对于您自己的库和第三方库,您需要指定路径。Windows 上的默认约定是库的调试版本和发布版本具有相同的名称,但放在不同的子目录中,通常称为。一旦您的项目成功构建并链接到它们,Qt Creator 就支持添加库的代码完成和语法突出显示。因为系统库通常不会更改并且通常默认找到,所以在添加库时不需要指定库路径或包含库的路径。原创 2022-11-29 10:40:43 · 1323 阅读 · 0 评论 -
QT工程配置.pro文件中LIBS 与 PRE_TARGETDEPS的区别
LIBS:形式:目的:指定要链接到项目中的库列表。如果您使用 Unix -l(库)和 -L(库路径)标志,qmake 在 Windows 上正确处理库(即,将库的完整路径传递给链接器)。该库必须存在,qmake 才能找到 -l lib 所在的目录。形式:目的:列出目标所依赖的库。某些后端(例如 Visual Studio 和 Xcode 项目文件的生成器)不支持此变量。通常,这些构建工具在内部支持此变量,它对于显式列出依赖的静态库很有用。参考主要区别。转载 2022-11-29 10:26:30 · 843 阅读 · 0 评论 -
linux环境下QT程序内存泄露检测-Qt creator +Valgrind检测内存泄漏(linux)
要是用See 'snap info valgrind' for additional versions.可以获得更高的版本。是相互独立的,所以需要安装valgrind后,Qt creator才能使用该功能进行内存检测分析。不想折腾了,就用3.15的吧。由于Qt creator和。原创 2022-11-28 17:07:39 · 1389 阅读 · 0 评论 -
Linux下 Qt程序异常结束调试
Linux下 Qt程序异常结束调试,异常调试。转载 2022-11-28 16:54:04 · 1008 阅读 · 0 评论 -
QT应用编程: window下QT程序异常捕获并生成DMP文件、PDB文件
win10 64位QT5.12.6。转载 2022-11-28 16:40:04 · 1738 阅读 · 0 评论 -
QT的进程间通讯的技术点:QTDBUS总结
转载请注明出处。转载 2022-11-25 16:55:50 · 716 阅读 · 0 评论 -
qRegisterMetaType用法总结
如果要在Qt信号槽中使用自定义类型,需要注意使用qRegisterMetaType对自定义类型进行注册,当然在不跨线程时使用自定义类型signal/slot来传递,可能不会出现什么问题;一旦涉及跨线程就很容易出错,回想下信号槽的作用就是用来对象与对象之间通信的,难免会跨线程,建议在使用自定义类型利用信号槽通信时,最好先通过qRegisterMetaType()将自定义类型进行注册,以免出错。转载 2022-11-23 15:07:26 · 9071 阅读 · 0 评论 -
QT笔记——QT类反射机制简单学习
4.Q_OBJECT 宏展开之后有一个虚拟成员函数 meteObject(),该函数会返回一个指向QMetaObject 类型的指针,通过该函数返回的指针调用 QMetaObject 类中的成员函数,便可查询到 QObject 及其派生类对象的各种信息。使用QMetaObject对象调用;2.moc编译器是一个类似于qmake的工具,用于读取分析C++文件,若发现类包含Q_OBJECT宏的声明,会生成另外一分包含Q_OBJECT宏实现的C++源文件,被编译器一起编译。转载 2022-11-18 21:58:19 · 488 阅读 · 0 评论 -
qt 内省与反射的例子
这个例子很典型,记录到这里,转载请注明来自:http://blog.csdn.net/ndzjx/article/details/77312559。转载 2022-11-18 21:52:01 · 196 阅读 · 0 评论 -
Qt反射机制一
虚拟成员函数,通过该函数返回的指针调用QMetaObject 类中的成员函数,便可查询。统的核心类,通过该类的成员函数可以获取QObject 及其派生类对象的所有元信息,①、Qt 使用了一系列的类来实现反射机制,这些类对对象的各个方面进行了描述,其中。//输出该成员函数的名称。②、对对象的成员进行描述:一个对象包含数据成员、函数成员、构造函数、枚举成员等。成员,在Qt 中,这些成员分别使用了不同的类对其进行描述,比如函数成员使用类。②、注册成员函数:若希望普通成员函数能够被反射,需要在函数声明之前加入。转载 2022-11-15 12:32:49 · 475 阅读 · 0 评论 -
QT QElapsedTimer QDeadlineTimer 计算已用时间的方法
QElapsedTimer timer; timer.start(); slowOperation1(); qDebug()原创 2022-10-28 14:56:46 · 400 阅读 · 0 评论 -
【翻译 + 整理】Qt样式表详解(3):属性——边框相关属性
当需要一定大小的边框时,将按原样使用角部分,并拉伸或重复顶、右、底、左部分以生成具有所需大小的边框。7、border-top-left-radius、border-top-right-radius、border-bottom-right-radius、border-bottom-left-radius:具体4个角的边界角半径。4、border-top-color、border-right-color、border-bottom-color、border-left-color:边框的四个边的颜色。转载 2022-10-27 19:12:10 · 8064 阅读 · 0 评论 -
QT样式表 ---QradioButton的一些样式
【代码】QT样式表 ---QradioButton的一些样式。原创 2022-10-26 14:48:46 · 2240 阅读 · 0 评论 -
QSplashScreen再研究
Qt学习16——程序启动画面QSplashScreen_shawn06的博客-CSDN博客_qsplashscreen原创 2022-10-25 17:43:09 · 142 阅读 · 0 评论 -
QT6.3在建立的qml和c++工程里面分别添加对应交互
FirstWidget就是添加的一个QWidget的子类,带ui的;最初是分别先建立两个类型的代码工程,比较不同的地方互相添加内容。1,建立的Widgets app工程里面添加qml交互。2,在建立的quick app工程里面添加c++交互。以下两种方式,都成功了。原创 2022-10-24 17:22:54 · 854 阅读 · 0 评论 -
QT一个C++加载UI文件的方法建立窗口的逻辑
之前我接触的gui的建立的 工程都是类和ui文件直接绑定的,会生成moc的临时文件。原创 2022-10-24 10:01:37 · 942 阅读 · 0 评论 -
Qt官方帮助文档的QThread两种类型例子理解
以上代码适用于只用执行完一次就可以,执行完,线程就退出了。如果不想让线程退出,就在run()函数里面加exec就可以,让该线程持续运行。以上代码适用于执行controller激活一次执行dowork完一次,线程并未退出。如果想让线程退出,就在对线程发出quit(),并wait()确定线程一定退出。原创 2022-10-20 22:48:09 · 184 阅读 · 0 评论 -
QT中centralWidget的使用
QMainWindow是做Qt开发最熟悉的控件啦,最近在做一个项目是由于调用的是一个封装好的库而无法直接使用Qt设计师设计界面只能使用代码码布局。主界面只能默认一个布局,当需要另外一个布局时就需要把之前的布局隐藏掉。在QMainWindow中使用setCentralWidget时,当出现主界面切换时,再次设置setCentralWidget时,需要先使用takeCentralWidget去掉原来的设置,才能再次使用setCentralWidget。然后,您可以设置新的centralWidget;转载 2022-09-28 09:13:36 · 3893 阅读 · 0 评论