
Qt
fearlazy
一个程序员
展开
-
Qt界面中如何嵌入网页?
原文链接:https://www.fearlazy.com/index.php/post/326.html环境:Qt5.9 + vs2017最简单的嵌入网页只需要QWebEngineView,QWebEngineView用于网页内容的展示。QWebEngineView继承于QWidget因此嵌入QWebEngineView很容易。QWebEngineView设置一个Url即可加载对应的网页,无论是本地的还是网络中的。测试:创建一个QWebEngineV..原创 2021-08-18 22:53:01 · 3948 阅读 · 1 评论 -
【示例】QWidget如何查找子控件?
原文链接:https://www.fearlazy.com/index.php/post/324.htmlQWidget类没有提供查找子控件的方法,但是它爹QObject有。这个方法就是findChild,它长这样:很显然它是一个模板,因此使用时需要提供一个类型,这个类型就是要查找的对象的类型。函数有两个参数:第一个是要查找的对象名(对象名通过setObjectName设置)第二个表示查找直接孩子还是递归查找(可以查找后代的后代),默认Qt::FindChil..原创 2021-08-12 23:01:52 · 2893 阅读 · 0 评论 -
Qt5改变虚拟键盘的样式
原文链接:https://www.fearlazy.com/index.php/post/323.htmlqtvirtualkeyboard是基于qml写的,因此需要具备一些qml的知识。1.先找到默认样式的源码,参考位置:默认样式有两个,一个是default,另一个是retro(更酷炫)。2.将样式源码拷贝到QtQuick-->VirtualKeyboard-->Styles下,修改为你喜欢的名字。3.打开样式目录下的style.qml文件,进行..原创 2021-08-11 20:09:26 · 1720 阅读 · 0 评论 -
Qt5改变虚拟键盘的大小
原文链接:https://www.fearlazy.com/index.php/post/322.html默认情况下qtvirtualkeyboard占据了半个屏幕,太霸道了,那么如何修改虚拟键盘的大小呢?可以通过修改源码的方式来修改其大小。1.找到desktopinputpanel.cpp,参考路径:2.修改show函数注释的代码为源文件原来的代码。3.重新编译安装,编译步骤参考:https://www.fearlazy.com/index.php/post..原创 2021-08-09 21:17:54 · 5129 阅读 · 2 评论 -
Qt5虚拟键盘基本使用步骤
原文链接:https://www.fearlazy.com/index.php/post/321.html环境:Qt5.9.6 + VS2017,桌面版程序。步骤:1.打开VS的命令行工具2.进入Qt源码中qtvirtualkeyboard目录下,执行qmake。默认只支持英文输入法,需要中文输入法可以在qmake后加上CONFIG选项:CONFIG+="lang-en_GB lang-zh_CN"3.nmake, 然后等编译完成。4.n...原创 2021-08-08 11:41:48 · 2454 阅读 · 0 评论 -
Qt5程序界面有时不刷新的问题
现象:用Qt5编写的程序,部分界面有时不能实时刷新。如点击一个QCheckBox,不会立即显示勾选状态,切换到其他界面再切换回来可以看到QCheckBox显示为被勾选。解决办法:设置主窗口属性: setAttribute(Qt::WA_Mapped);具体原因不详。Qt::WA_Mapped解释为指示部件被映射到屏幕,由Qt内核设置和取消。...原创 2021-08-07 14:57:46 · 2903 阅读 · 1 评论 -
【实例】QString编码转换
原文链接:https://www.fearlazy.com/index.php/post/314.htmlQString以16位unicode方式存储,用16位表示一个字符。正常情况下在程序中使用同一的编码即可,但有时需要将字符串发送到别的设备时,有的设备支持的编码方式有限制就需要进行转码。QString提供了几个转换编码的函数进行编码转换。例:输出:toLocal8Bit()将字符串转换为本地的编码,toUtf8()将字符串转换为utf-8。这些函数返回..原创 2021-07-31 12:23:43 · 2423 阅读 · 0 评论 -
【实例】 以十六进制形式打印QString字符串
原文链接:https://www.fearlazy.com/index.php/post/312.html十六进制形式可以更直观的看到数据的真实样子,有时候对于调试很有帮助。不同的编码方式下QString的十六进制不同,如:GBK用两个字节来表示一个中文字符,而utf-8用三或四个字节来表示一个中文字符。QString可以借助QByteArray来实现十六进制形式输出,将QString转换为QByteArray打印。例:字符串 "中文english"以上3个以to开头的函原创 2021-07-31 12:21:41 · 3447 阅读 · 0 评论 -
使用arg格式化字符串
原文链接:https://www.fearlazy.com/index.php/post/311.html需求:现有分钟和秒数,需要格式化时间字符串,秒数不足两位时前面用0补充,如14:08。方法:QString可以用sprintf函数格式化字符串,也可以用arg来达到以上目的。arg有20个重载函数,我们使用一个带4个参数的,代码如下:结果输出14:08。在第二个arg使用了格式化,其4个参数分别是数值(int型)、最小宽度、进制和填充的字符。第二参数(最小..原创 2021-07-31 12:19:18 · 738 阅读 · 0 评论 -
Qt判断对象的类名的坑
原文链接:https://www.fearlazy.com/index.php/post/310.html现象:Qt可以通过元对象获取对象的类名。例如:获取按钮的类名可以使用btn->metaObject()->claassName(); 其中btn是QPushButton类型的指针。在判断一个对象的类名使用了 == ,如下所示:结果显示false。原因:className()函数返回值类型是const char*,而“QPushButton”字符原创 2021-07-31 12:17:54 · 1899 阅读 · 0 评论 -
Qt设置按钮的图标的方法
原文链接:https://www.fearlazy.com/post/284.html以QPushButton为例,设置按钮的图标可以使用函数setIcon,设置图标大小使用setIconSize。测试代码:效果:也可以直接使用样式表的方式:qproperty-icon和qproperty-iconSize分别表示图标属性和图标大小属性,设置后显示效果同上。这种方式有个缺点就是不能为不同的状态(如按下按钮)设置不同的图标,而且也没办法设置图标与文字...原创 2021-04-28 23:28:14 · 18201 阅读 · 0 评论 -
使用Qt将图片转换为灰度图
原文链接:https://www.fearlazy.com/post/283.html灰度图没有彩色,它的RGB色彩分量全相等,如(100,100,100)和(200,200,200),值越大越亮。要将图片转换为灰度图只需要根据各像素的RGB值计算出对应的灰度值即可。那么问题来了灰度值该怎么计算呢?方法有好几种,有取直接取G的值的,也有取RGB平均值的,更为常用的是加权平均法,也就是R、G、B的权重不一样:Gray = R*0.3 + G*0.59 + B*0.11测试...原创 2021-04-27 23:26:57 · 2832 阅读 · 0 评论 -
用Qt实现图片的负片效果
原文链接:https://www.fearlazy.com/post/282.html实现图片负片效果的原理就是将图片的每个像素的RGB值分别设置为255减去其本身,如:像素点(100,100,100)设置为(155,155,155)。知道了这个原理,用Qt实现起来也很简单。需要用到的类是QImage,QImage的pixel函数用于获取像素点,参数是像素点坐标。setPixel函数用来设置像素点参数是像素点坐标以及要设置的颜色值。测试:1.准备一张图片:2. 测试...原创 2021-04-26 23:37:04 · 469 阅读 · 0 评论 -
Qt设置程序的字符集
原文链接:https://www.fearlazy.com/post/281.html乱码问题的罪魁祸首就是程序的编码,Qt5之后可以统一使用utf-8的编码方式。Qt设置编码可以在pro文件中写上:msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8execution-charest表示执行字符集。设置源码字符集使用 :msvc:QMAKE_CXXFLAGS+=-source-charset:utf-8还有一种更简单粗暴的方...原创 2021-04-19 21:43:25 · 3319 阅读 · 0 评论 -
QListWidget如何设置item的间隔?
支持原文:https://www.fearlazy.com/post/278.htmlQListWidget的item默认情况下是粘在一起的,像这样:有些时候我们需要item之间有一些间隔,比如使用横向列表来实现菜单。例:那么怎样设置item的间隔呢?1.使用样式表,设置item的margin-left或margin-right。2. 使用QListWidget的setSpacing函数,直接设置item四周的空间。特别说明:若后续发现文...原创 2021-04-16 22:51:21 · 9119 阅读 · 0 评论 -
QScrollBar背景颜色有点阵是怎么回事?
支持原文:https://www.fearlazy.com/post/277.html现象:使用qss设置QScrollBar的背景色为红色,但实际显示的背景色并非纯色,而是在红色上有点阵一样的东西。例如:创建一个水平方向的滚动条,设置背景为红色,代码如下。显示效果如下解决办法:看到的点阵一样的背景实际上并不是滚动条的背景,而是add-page和sub-page的,可以将它们的背景设置为none。显示效果如下特别说明:若后续发现文章中的错...原创 2021-04-15 23:09:08 · 673 阅读 · 0 评论 -
Qt窗口样式表不生效的问题
支持原文:https://www.fearlazy.com/post/276.html现象:从QWidget派生一个窗口类,该窗口本身的样式表不生效,该窗口的子窗口样式表有效。例如:在基于QWidget的测试工程中添加一个QWidget的子类TopWin,在TopWin中放一个按钮,然后使用qss设置TopWin的背景为红色。接着将TopWin放在Widget窗口中运行效果:TopWin的背景颜色没有设置成功,测试按钮的颜色设置成功(受TopWin样式的影响)。.原创 2021-04-14 23:07:26 · 1515 阅读 · 0 评论 -
Qt如何关闭debug信息的输出?
支持原文:https://www.fearlazy.com/post/275.htmlqDebug()写太嗨了,满屏都是调试信息怎么办?如何快速关闭调试信息的输出呢?方法:在pro文件中加上DEFINES += QT_NO_DEBUG_OUTPUT然后重新构建一下程序。qDebug的信息就不再输出了,不过qWarning、qCritical等信息仍然可以输出。类似的宏还有:QT_NO_INFO_OUTPUTQT_NO_WARNING_OUTPUT特别...原创 2021-04-14 22:27:39 · 1416 阅读 · 0 评论 -
Qt实现简单的图片倒影效果
支持原文:https://www.fearlazy.com/post/274.html思路:要获得图片的倒影效果,首先要获得图片的对称图片,然后对图片进行半透明处理即可。在Qt中要获得图片的对称图片只需要调用QImage的mirrored函数即可,该函数返回QImage的一个镜像QImage对象。根据参数的不同可以获得水平和垂直两个方向上的镜像图片。半透明处理可以通过设置QPainter的不透明度来实现(调用QPainter的setOpacity)。测试:代码不...原创 2021-04-14 22:15:22 · 376 阅读 · 0 评论 -
如何去除QTableWidget表格选中Item时的虚线框?
默认情况下QTableWidget单元格选中时会有一个虚线框,如下图所示:有这个虚线框的存在很是影响美观,尤其是在写了样式表的时候特别明显。那么该如何去除该虚线框呢?方法1:设置表格不获取焦点。table->setFocusPolicy(Qt::NoFocus);这种方法简单粗暴,缺点就是这样设置后没法使用与focus状态相关的功能,如不能使用tab键切换选中的单元格。方法2:使用样式表,设置outline为none,并且设置item的样式。..原创 2021-03-30 10:56:54 · 6286 阅读 · 10 评论 -
如何设置QListWidgetItem勾选框的样式?
https://www.fearlazy.com/post/270.htmlQListWidgetItem通过setCheckState可以设置列表项的勾选状态,但是默认的勾选框样式通常和UI设计的效果不搭,如图:实际使用时常常需要根据设计设置其样式。那么如何设置勾选框的样式呢?方法: 使用样式表虽然勾选框是通过调用QListWidgetItem的setCheckState函数出现的,但是其样式并不是通过设置item的样式来实现的,而是通过QListWidget::indicator来实原创 2021-03-29 12:27:39 · 3221 阅读 · 1 评论 -
QTableWidget如何设置只能选中一行?
1.默认情况下QTableWidget点击一次选中一个单元格。使用setSelectionBehavior设置一次选中一整行。传入参数是一个枚举,SelectRows表示选中行。2.此时按住ctrl点击表格,可以选中多行。接着使用setSelectionMode设置选中模式为单行:参数也是一个枚举,以上两个枚举都是在QAbstractItemView类中定义的。https://www.fearlazy.com/index.php/post/256.html...原创 2020-12-05 21:53:50 · 9541 阅读 · 0 评论 -
QString如何替换字符串中小括号内的字符串?
https://www.fearlazy.com/post/269.html目标:有一个字符串如:QString str("test1(97) test2(88) test3(90)"); 希望将小括号内的数字全部替换成good。 替换后的字符串变成test(good) test2(good) test3(good)。方法:由于小括号里的内容都不一样,很显然用正则表达式最合适。恰好QString的replace函数是支持正则表达式的。replace(QRegExp("表...原创 2021-03-27 11:27:26 · 1556 阅读 · 0 评论 -
QMap 如何根据value排序?
https://www.fearlazy.com/post/268.html需求:有一个QMap<QString,qreal> map,存储的数据为名字对应值,如: apple -> 12.2 , orange-> 23.3,banana->10.5。 现在需要按照map元素值的升序的顺序获取QMap中的所有元素。也就是希望获得的结果是:banana,10.5 -> apple,12.2 -> orange,23.3 。方法:qSort可..原创 2021-03-27 11:02:20 · 4343 阅读 · 0 评论 -
如何让QTableWidget的列占满表格?
https://www.fearlazy.com/post/266.html当QTableWidget的表格只有很少列时,表格的右边会出现一片空白区域,很不好看:那么如何才能让表格的列占满表格呢?方法1: 拉伸最后一列,让它填满剩余的空白。 调用QHeaderView 的 setStretchLastSection函数。示例代码: table->horizontalHeader()->setStretchLastSection(true);horiz...原创 2021-03-27 00:25:14 · 11387 阅读 · 2 评论 -
频繁调用QApplication processEvents导致的异常
原文链接:https://www.fearlazy.com/index.php/post/258.html现象:创建一个子线程,在子线程中不断发送信号给主线程,在主线程的对应的槽函数中调用QApplication::processEvents()。例:CMyThread继承于QThread类,在run函数中间隔10ms发送一次信号Widget在主线程中,sltDosomething槽连接sigDoSomething信号。在槽函数中只调用QApplication::pr..原创 2020-12-23 22:41:43 · 3781 阅读 · 1 评论 -
Qt中文乱码的几种情况
文章已更新,最新地址:http://www.fearlazy.com/index.php/post/129.html测试环境:Qt5.9.6 ,使用VS2017的编译器。一、乱码现象:1.源代码中的中文显示乱码2.编译时出现“常量中有换行符"的警告。3.运行时软件界面中文显示乱码二、解释:相关内容:源码字符集、...原创 2019-06-29 16:28:57 · 798 阅读 · 0 评论 -
Qt列表知多少?
文章可能被更新,最新地址:http://www.fearlazy.com/index.php/post/64.html一、简介:QListWidget是Qt提供的列表控件。它的父类是QListView,实际上QListWidget是一个自带model的view。通常情况下搭配QListWidgetItem(以下简称item)使用。二:入门:QListW...原创 2018-04-17 07:13:45 · 2612 阅读 · 0 评论 -
qt轻松实现不规则按钮
文章已更新,最新地址:http://www.fearlazy.com/index.php/post/134.htmlQt实现不规则按钮只需要一个函数就能搞定:setMask()以QToolButton为例:1.准备好一张带透明区域的图片,QToolButton将它设置为图片,并且设置大小为图片大小。此时按钮的可见区域以及可点击区...原创 2019-06-29 20:05:21 · 4165 阅读 · 1 评论 -
Qt踩坑之mysql数据库不支持事务操作?
文章已更新,最新地址:https://www.fearlazy.com/index.php/post/145.html现象:在调试数据库操作时发现还没commit数据已经插入表中,执行rollback也没有作用,明明已经调用了transaction(),这是为什么呢?开始排查:1.确定数据库驱动是否支持事务?使用QSqlDriver的hasFe...原创 2019-07-21 23:33:20 · 999 阅读 · 0 评论 -
Qt为输入框提供提示信息
全文链接:http://www.fearlazy.com/index.php/post/118.html 当我们在使用一个陌生的软件时常常会感觉不知所措,因此在写软件的时候都要考虑增加一些信息来帮助使用者。比如说提供文字标签来告诉使用者某一块区域的作用是什么。又或者干脆用一块区域滚动显示一些提示。但这里要说的是一种很常见又有用的提示方式,在输入框的内部提示该输入框需要输入什...原创 2019-05-29 10:46:57 · 6209 阅读 · 0 评论 -
QLineEdit如何控制只能输入IP地址?
文章已更新,最新地址:http://www.fearlazy.com/index.php/post/128.html要让输入框只能输入IP地址,首先会想到的就是使用正则表达式。QLineEdit也支持使用正则表达式,就像这样:QLineEdit支持设置验证器来限制输入的内容,QRegExpValidator是其中一种。正则表达式写法有很多,以上的表达式可以参考一下...原创 2019-06-29 16:09:54 · 5615 阅读 · 0 评论 -
一句话为Qt设置应用程序图标
文章已更新,最新地址:http://www.fearlazy.com/index.php/post/127.html 要设置应用程序的图标首先要有一张图标文件(.ico)。将文件放在工程文件(.pro)同级目录中。 在pro文件中添加:RC_ICONS += xxx.icoqmake工程。 大功告成。 在qmake的时候Qt...原创 2019-06-26 13:25:58 · 214 阅读 · 0 评论 -
Qt图形视图框架图片图元QGraphicsPixmapItem
文章可能被更新,最新地址:http://www.fearlazy.com/index.php/post/107.html看这个标题还真有点拗口,一句话里出现了四个图字。这句话的关键词是图片,前面讲了基本形状、直线和文字,再加上这里的图片,Qt的图形视图框架就能表达出很丰富的内容了。QGraphicsPixmapItem的使用也很简单,创建一个对象,然后添加到场景中就完事...原创 2019-01-01 23:28:50 · 4383 阅读 · 0 评论 -
Qt图形视图框架直线图元QGraphicsLineItem
文章可能被更新,最新地址:http://www.fearlazy.com/index.php/post/106.htmlQGraphicsLineItem直接继承于图元基类QGraphicsItem,它的使用也十分简单。提供的设置接口很少,一个setLine和一个setPen就没了。对于QGraphicsLineItem的使用真没什么可说的。不过值得一提的是QGra...原创 2018-12-28 23:10:19 · 6632 阅读 · 4 评论 -
Qt图形视图框架基本图元
原文链接:http://www.fearlazy.com/index.php/post/104.html Qt图形视图框架三要素:视图、场景和图元,其中图元是组成图形的元素,也就是图形的内容所在。 Qt封装了一些常用的图形元素供我们使用,如初识图形视图框架中使用的QGraphicsRectItem就是其中一个。除此以外还有QGraphicsEllipseItem(椭圆)、QGraphi...原创 2018-12-27 22:14:15 · 921 阅读 · 0 评论 -
The Event System(Qt的事件系统 )
英语没过四级,慎重参考 In Qt, events are objects, derived from the abstract QEvent class, that represent things that have happened either within an application or as a result of outside activity that the ...翻译 2016-09-13 16:15:51 · 986 阅读 · 0 评论 -
The Meta-Object System(Qt元对象系统)
Qt’s meta-object system provides the signals and slots mechanism for inter-object communication, run-time type information, and the dynamic property system.Qt元对象系统提供内建对象通信的信号和槽机制,运行时类信息,和动态属性系统。 ...翻译 2016-09-14 08:37:23 · 569 阅读 · 0 评论 -
QGraphicsScene简介(翻译)
文章可能被更新,最新地址:http://www.fearlazy.com/index.php/post/123.html场景类提供了一个管理大量的2D图元(graphical items)的平面.场景作为QGraphicsItem的容器. 它和视图(QGraphicsView)一起使用可视化图元在2D的平面上,这些图元例如:线、矩形、文本、甚至是用户自定义的图元. 场景是图形视...翻译 2016-09-20 08:48:52 · 7890 阅读 · 1 评论 -
Qt图形视图框架绕不开的问题 - 坐标系
原文链接:http://www.fearlazy.com/index.php/post/103.html上一篇了解了图形视图框架的构成。现在来了解一下在使用这个框架经常打交道的坐标系。坐标系有什么好了解的呢?不就是一个X轴和一个Y轴吗?对于QPainter确实是这样,Qt的坐标系对于x轴而言往右值增大(原点左为负),对于y轴而言往下值增大(原点上为负),y轴和以前在数学上学习的坐标系是相反的。...原创 2018-11-12 07:44:41 · 743 阅读 · 0 评论