Qt
mrbone11
这个作者很懒,什么都没留下…
展开
-
Qt-QDialog非模态置于窗口之上且操作主窗口不隐藏dialog的方法
将当前widget提升到parent widget stack的最顶层,这使我们在操作其他窗口时,也能保持dialog显示在其他窗口的上方而不会被遮盖住。方法会重置其windowFlags,因此我们将其原始windowFlags传入作为参数以保留原始属性。不传入将导致dialog显示异常。以非模态显示dialog,是我们能操作dialog以外的其他窗口。QDialog继承自QWidget,原创 2024-03-21 00:07:17 · 1131 阅读 · 0 评论 -
Qt-QPainter drawText方法不同重载之间的区别
QPainter类的drawText方法有如下重载,可以分成两类,一类是提供点坐标绘制文本,一类是提供方框绘制文本。区别在于提供点坐标进行绘制的时候,点是在文本的左下角。而提供矩形的时候,矩形的点是在文本的左上角,同时也是矩形的左上角。可以看到两个函数提供的点坐标锚定的是文本的不同位置,使用时要多多注意。原创 2024-03-14 00:16:39 · 753 阅读 · 0 评论 -
Qt-QFileDialog保存文件及获取带扩展名的文件名
构造函数的第一个参数是parent第二个参数是dialog标题,第三个参数是默认打开的文件路径,如果文件路径带有文件名则文件名会自动填入文件名一栏中,第四个参数是过滤的文件类型,括号里面是扩展名,括号前面是扩展名的文件类型描述。方法,返回的文件名是不带后缀的,也无法通过设置default suffix来改变此行为,因为dialog是方法内部创建的,我们无法访问到。接口在文件名没有后缀的情况下会自动添加默认后缀名,如果有后缀名则不添加,这里的“文件名”指的是dialog中这一栏的值。路径+abc.txt。原创 2024-01-23 22:13:38 · 1692 阅读 · 1 评论 -
Qt-QTransform介绍与使用
我们知道Qt的坐标系是左上角为原点,x轴向右,y轴向下,屏幕上每个像素代表一个单位,那么,如果我们想要在屏幕上建立自己的坐标系用于绘制,就需要借助QTransform。scale函数将xy轴放大缩小,比例值为Qt像素值/自定义坐标像素值,1/2表示,1一个原单位值等于现在2个单位值,其中负数表示改变y轴为原来相反方向。可以看到Qt坐标系(红),自定义坐标系(绿)和自定义坐标系中绘制的矩形,实际为25*100的矩形,且可以发现penWidth宽度在y轴也发生了放大。原创 2023-12-19 00:09:08 · 864 阅读 · 0 评论 -
Qt-Q_OBJECT宏使用与“无法解析的外部符号qt_metacall/metaObject/qt_metacast“
这里的几个函数的声明是由Q_OBJECT宏引入的,而其对应的实现是由moc实现的,如果我们更新了代码但是没有执行qmake,moc可能就无法识别到这个宏从而无法帮助我们生成moc文件,qtcreator中右键项目点击执行qmake再生成即可,或者直接点击重新构建即可。一般来说Qt强烈建议继承QObject的子类都加上Q_OBJECT宏。原创 2023-12-06 22:59:00 · 1089 阅读 · 0 评论 -
Qt-QSplitter正确设置比例以及移除widget
网上说的setStetch方法对我不管用,并且会受到sizePolicy和minimum size影响,因此我并不推荐使用。splitter大小不会变化,比设置的值多的和少的空间将会按照sizes之间的比例分配。size policy保留,且widget至少有minmum size的最小值大小。原创 2023-11-30 22:43:22 · 1487 阅读 · 1 评论 -
Qt-No relevant classes found. No output generated问题解决
qt在编译时会使用moc,即Meta-Object Compiler,对任何继承于QObject的子类我们都应在类开头写上Q_OBJECT,而moc做的一件事情便是将带有Q_OBJECT的类的cpp文件使用moc进行处理,这是因为Q_OBJECT实际上声明了一些函数,而moc负责对其进行实现,Qt信号槽的能力就依赖于moc,处理生成的文件名称为moc_xxxx.cpp,最终C++编译器是将这些moc生成的文件再拿去编译的。这其实不是一个错误或者警告,而是一个信息而已,需要根据我们的具体情况解决。原创 2023-11-30 22:19:56 · 957 阅读 · 0 评论 -
Qt-事件循环与QtConcurrent、QThread结合使用时注意的点
【代码】Qt-事件循环与QtConcurrent、QThread结合使用时注意的点。原创 2023-08-23 00:21:23 · 1158 阅读 · 0 评论 -
Qt-QBasicTimer can only be used with threads started with QThread原因探究
QBasicTimer can only be used with threads started with QThread。在项目中检查发现确实使用了一个static的QDialog,并且ui包含combobox的时候退出时会打印warning,如果没有combobox则不会。中,提问者的现象和我一致,猜测的原因是QObject和QApplication的析构顺序造成的。查找资料后发现,报错的原因很可能是因为使用了static QObject造成的原创 2023-08-22 23:31:53 · 1770 阅读 · 0 评论 -
C++-使用clang-format格式化代码
我的解决方法是在https://github.com/llvm/llvm-project/releases下载LLVM-16.0.5-win64.exe。windows下,在.pro目录下创建.clang-format文件,linux下,在用户目录创建.clang-format文件。,解压后在bin下找到clang-format.exe,修改Clang Format command为exe。重启后,点击工具->选项->Beautifier->Clang Format,选择使用File定义风格。原创 2023-08-08 23:09:43 · 588 阅读 · 0 评论 -
Qt-XPM格式图片
X PixMap (XPM)是一种基于ASCII编码的图像格式。特点是文件格式简单,可以被任何文本编辑> 器创建和修改,另外通过#include指令可以将XPM格式的图形数据导入C语言源文件。这里定义了一个16x16的图片,使用3种颜色,每个像素用一个字符表示。这样我们就在没有任何绘图工具的情况下绘制了一个简单的图片。Qt中可以使用XPM格式的文件作为button icon。那么什么是XPM文件?原创 2023-05-11 22:47:16 · 713 阅读 · 1 评论 -
Qt-LineEdit限制输入-正则与validator
编写Validator子类主要继承不同Validator类并重写validate方法。例如:QValidator::Intermediate表示输入中间状态,需要根据后续输入判断是否变为QValidator::Acceptable或者QValidator::Invalid原创 2022-07-12 16:10:24 · 1075 阅读 · 0 评论 -
Qt-HTTP类实现
使用Qt类实现http协议get和post请求原创 2022-07-12 15:55:43 · 690 阅读 · 0 评论 -
Qt-多层嵌套界面类对象之间信号连接的一种方法-信号中转类
项目中存在多个界面类对象,并且存在比较深的嵌套关系,这时候如果希望连接顶层的对象信号到底层的对象槽,一种方法是逐级连接信号,但是这种方法要写很多个connect函数,并且对不熟悉此代码的人来说,需要一层一层跟进才知道这个信号最终由哪个槽函数响应。个人研究了一种比较“土”的方法来解决这种问题。引入第三个类,这个类只做信号转发,例如:且存在一个全局可获取的UIUpdater对象uiUpdater。假设A类对象a要发信号aSig到B类对象b的槽bSlot,先连接uiUpdater的信号sigHistoryC原创 2022-07-12 14:09:41 · 1226 阅读 · 0 评论 -
Qt-QProcess无法读取进程输出以及CreateNamedPipe failed(拒绝访问)问题解决
工程中遇到一个奇怪的问题,使用QProcess创建进程后,需要读取进程标准输出,但怎么都读取不到,并且连接readyReadStandardOutput信号也怎么都无法触发槽。并且软件启动后第一次运行总是失败,而后续不会失败。经过检查,发现启动进程后,控制台有一行输出这说明QProcess启动后存在问题,再次调试发现此输出在process->start调用之后出现,说明问题一定出现在这个方法内。查看源码最终找到错误出在调用windows平台API接口处这里传入了几个参数,其中只有pipeName参数是原创 2022-07-12 09:54:43 · 2404 阅读 · 0 评论 -
Qt-Q_OBJECT宏及控件提升导致的类重定义问题
在项目中遇到了这么个奇怪的问题,类加上Q_OBJECT宏之后,出现类重定义报错。具体描述如下:SelectConvertDialog是一个ui类,.ui文件中通过控件提升的方式提升QTableWidget为SelectConvertTable,而SelectConvertTable类头文件中也加上了Q_OBJECT宏,编译后报错:重定义意味着出现了两次声明,但是我们显然只声明了一次,那么唯一的可能,就是在头文件include的时候,将这个头文件include了两次报错的文件是mocs_compilatio原创 2022-06-14 10:13:20 · 1058 阅读 · 0 评论 -
Qt-正则匹配查找-非贪婪模式-分组捕获
正则查找所有匹配字符串,设置非贪婪模式,分组捕获使用方法QRegExp regExp(R"(= \"(\w*)\", \"(.*\.vcxproj)\")");regExp.setMinimal(true);//Qt中设置正则非贪婪模式int pos = 0;ui.comboBox_proj->clear();while ((pos = regExp.indexIn(content, pos)) != -1){ int n = regExp.matchedLength();原创 2022-05-26 17:15:29 · 611 阅读 · 0 评论 -
Qt-bat脚本快速发布exe
通过脚本实现拖动exe到bat上直接发布该exe。这样就不用命令行去手动执行发布命令了。脚本如下:set path=%~1echo 该文件所在位置为%path%C:\Qt\Qt5.9\5.9.4\msvc2015_64\bin\windeployqt.exe %path%pausewindeployqt根据自己情况修改,使用时把bat放到exe所在目录,然后拖动exe到bat脚本上即可。...原创 2022-05-26 13:51:29 · 252 阅读 · 0 评论 -
Qt-线程相关的几个类的介绍与使用
QThreadQThread是Qt实现线程支持的一个低级别的类,QThread对象代表了一个线程。我们通过继承QThread类来实现代码在线程中执行。class Thread : public QThread { protected:void run() { /* your thread implementation goes here */}};开启新线程并执行:Thread *t = new Thread; t->start(); // start(), not run原创 2022-05-24 14:58:00 · 276 阅读 · 0 评论 -
Qt-事件循环
通过QCoreApplication::exec()函数,我们就进入到一个事件循环中,当调用QCoreApplication::exit()或者QCoreApplication::quit()函数,循环便终止了。原创 2022-05-24 13:58:04 · 4837 阅读 · 0 评论 -
Qt-Model/View基础概念和最简单例子
文章目录基本概念Model/View入门Table View例子Table View例子扩展数据改变信号编辑数据基本概念模型/视图是一种用于将数据与处理数据集的控件的视图分离的技术。Qt中的标准控件不是为从视图中分离数据而设计的,这就是 Qt 有两种不同类型的控件的原因。两种类型的控件看起来相同,但它们与数据的交互方式不同。使用标准控件时数据作为控件一部分[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ppksRhdf-1632141361254)(vx_images/原创 2021-09-20 20:36:58 · 2616 阅读 · 0 评论 -
Qt-QThread与QObject使用需要注意的点
QThread继承于QObject,代表一个线程,每个线程都有自己的事件循环。初始线程通过QCoreApplication::exec()开启事件循环,单dialog应用通过QDialog::exec()开启,其他线程通过QThread::exec()开启每个QObject对象都生存(live)于其被创建的线程中。查看QObject对象所在线程可调用thread()QObject::moveToThread()可改变对象的线程亲和性(thread affinity)。如果有父对象则不能..原创 2022-03-10 17:13:44 · 897 阅读 · 0 评论 -
Qt-Qt版本线程池实现
#pragma once#include <QList>#include <QThread>#include "Worker.h"#include <QObject>class ThreadPool: public QObject{ Q_OBJECTpublic: ThreadPool(int size); ~ThreadPool(); static ThreadPool* getInstance();//默认5个线程原创 2022-03-11 16:26:54 · 589 阅读 · 1 评论 -
Qt-设置completer下拉框样式
completer->popup()代表了输入时弹出的下拉框,是QAbstractItemView类型,设置它的样式的坑在于必须要setItemDelegate,否则部分样式不生效。setScrollBar设置了scrollBar的样式,可以参考之前我写的qt文章进行自定义。原创 2021-12-04 10:24:21 · 1897 阅读 · 2 评论 -
Qt-滚动条样式自定义
QLabel{font-family: “MicroSoft Yahei”, Arial;}QPushButton{border-radius: 4px;font-family: “MicroSoft Yahei”, Arial;}#label_Info {color: rgba(207,89,91,1);}QScrollBar:vertical{width:8px;background:rgb(0,0,0,0%);margin:0px,0px,0px,0px;padding-原创 2021-11-03 20:59:20 · 1148 阅读 · 2 评论 -
Qt-使用border image填满背景
什么是border image?A border image is an image that is composed of nine parts (top left, top center, top right, center left, center, center right, bottom left, bottom center, and bottom right). When a border of a certain size is required, the corner parts a原创 2021-03-25 22:19:20 · 3249 阅读 · 0 评论 -
Qt-正确动态删除布局中控件
使用布局控件的addWidget和removeWidget时,发现添加控件没有问题,但是却无法删除控件,删除后添加又出现了奇怪的错误布局,google后发现,removeWidget并不是删除控件Removes the widgetwidgetfrom the layout. After this call, it is the caller's responsibility to give the widget a reasonable geometry or to put the widget..原创 2021-03-25 22:29:58 · 9884 阅读 · 7 评论 -
Qt-qss盒子模型
QLabel宽高均设置200,并设置QLabel的styleSheet属性:#label{ background:#cdcdcd; background-clip:content; padding:20px; border:20px solid; margin:20px;}效果如下从里到外的色块分别是content,padding,border,margin区域。设置geometry属性的宽度和高度,指的是包括margin在内的长和高,调整padding,border,..原创 2021-03-29 22:13:50 · 417 阅读 · 0 评论 -
Qt-Designer默认值的坑
Qt Designer 可以很方便的进行界面设计和控件属性的设置,但是这里有一个非常隐蔽的细节,很容易踩坑,这个细节就是——控件的属性值是否是默认值。原创 2021-09-19 15:47:11 · 796 阅读 · 0 评论 -
Qt-命令行更新翻译.ts文件
lupdate ./ -ts project_en.ts./表示源码搜索目录,默认递归搜索,-ts指定输出的ts翻译文件,如果文件已存在则会更新已有文件,不指定语言时根据文件名判断翻译语言,如这里lupdate会根据en判断为英文...原创 2022-02-25 10:37:05 · 2684 阅读 · 1 评论 -
Qt-Model/View进阶
文章目录高级主题什么是委托(Delegates)星星评分例子StarDelegate定义StarDelegate 类实现StarEditor 类定义StarEditor 类实现StarRating 定义StarRating 实现main()函数总结高级主题什么是委托(Delegates)在QListView、QTableView或QTreeView 中显示数据时,各个item由委托绘制。此外,当用户开始编辑一个item时(例如,通过双击该item),代理会提供一个编辑器控件,该控件在进行编辑时放置在该原创 2021-09-20 20:41:51 · 546 阅读 · 0 评论 -
Qt-点击QCompleter时直接跳出下拉框
Qt-点击QCompleter时直接跳出下拉框if (obj == ui.mtLineEdit && event->type() == QEvent::MouseButtonPress){ ui.mtLineEdit->completer()->setCompletionPrefix(ui.mtLineEdit->text());原创 2021-12-04 10:31:00 · 904 阅读 · 0 评论 -
Qt-QtDesigner插件编写
导出单一自定义组件新建工程创建后会自动生成两个类Plugin结尾的类用于提供有用的组件信息给Qt Designer,非Plugin结尾的类表示自定义组件的实现。导出单一组件时,需要Q_PLUGIN_METADATA宏,提供插件的元信息;Q_INTERFACES宏告诉Qt此类实现了哪个接口。下面一系列函数重写了QDesignerCustomWidgetInterface的接口。大致含义如下:bool isContainer() const;//组件是否为容器,容器可包含其他QWidge原创 2022-04-05 18:13:49 · 1212 阅读 · 2 评论 -
Qt-QWebEngineView使用问题解决
asd原创 2021-04-16 21:56:41 · 3696 阅读 · 0 评论 -
Qt-QWebEngineView几个大坑
js资源文件加到qrcarray[]与array.at()原创 2021-11-03 20:53:52 · 11366 阅读 · 14 评论