Qt
文章平均质量分 83
slowlytalk
正经程序员.
展开
-
QTAV的编译、使用及遇到的问题
最近有个功能需求,界面可以直播显示某个特定摄像头的实时画面,通过对Qt本身的 QMiediaPlayer,和其他一些在网上找到的组件做了一些对比,最终选择了QtAv作为我们的组件使用。QtAV 是一个基于 Qt 和 FFmpeg 的跨平台、高性能多媒体播放框架。原创 2024-01-10 23:46:21 · 1787 阅读 · 1 评论 -
Qt 的流式布局 FlowLayout
一直苦寻于一个比较智能的布局方式,能够满足软件界面进行resize的时候,对已经存在的布局进行重新布局。能够合理的判断界面的size,在界面放大的时候,显示的item的行数减少,相反,界面缩小的时候,显示的 item 行数能相应的增加,也就是能够满足界面是充盈的并且不会有超出界面的显示 item。而我们已知的在Qt中已有的几种布局方式,都没办法直接达到我们的预期。比较接近的是栅格布局,但也要进行二次开发才能满足需求。这种方式比较适合每个 item size 相同的情况,实现的原理也就是在调用 resizeE原创 2024-01-06 14:53:41 · 1912 阅读 · 0 评论 -
Qt自定义的ColorDialog--仿QColorDialog
这样设置之后,按照预想应该是正常的,没想到的是,运行起来之后,直接堆栈溢出了。因为设置之后,其他的也改变了value,改变了就会发信号,发了信号我们就又设置了,设置了就又发信号,所以就一直在这样的循环中重复了起来。刚开始时,确实有种无处下手的感觉,后来突然想想,当你不会的时候,如果手边刚好有现成的差不多的东西,不仿去抄一抄,所以,我就看了下。设置颜色值的时候需要进行一次转换,因为这个HSV空间的最大值是359和255,所以要根据界面的大小转换成在HSV空间对应的数值。的背景色为对应的渐变色。原创 2023-05-27 21:32:46 · 1399 阅读 · 1 评论 -
Qt实现undo和redo功能--连续后退
这就是在某个需要触发的时刻记录下当前的状态和这一状态前面的那个状态,然后ctrl+z的时候设置为当前状态的前一的状态,ctrl+y的时候设置为当前状态的后一状态。原创 2023-05-17 21:42:28 · 1486 阅读 · 0 评论 -
QRegion 限制 QPainter 的绘制区域
一般在绘制的过程中,我们有很大的可能性是需要擦除的,擦除的时候也只能擦除我们目前在画的颜色区域,并不会将所有的都擦除。看着这个需求的时候,我首先想到的是图层,就是类似PS的图层一样,就是将这张图片中的每一种颜色单独提取出来另作一种图层,这样就会得到多张只包含一种颜色的图片,这些图片的其他区域是透明的。有一张图片,这张图片上面被我用不同的颜色画了不同的区域,然后我想选择这张图片中的某一种颜色,只在这种颜色所在的区域内进行绘制或者用橡皮擦擦除这种颜色,而不会影响其他颜色。原创 2023-05-16 22:30:14 · 821 阅读 · 0 评论 -
QImage 如何设置图片的透明度
最近遇到了一些这样的需求,在窗口可以调节显示图片的透明度,但是不能影响其他图片。一个窗口显示的图片并不是一张,而是多张通过绘制的形式叠加起来的。可以理解为类似图层。就像下面这个组合一样,想法是在拖动右侧透明度的滑条的时候,只修改上层图像的透明度,并不会修改低层背景图的透明度。原创 2023-04-28 00:10:10 · 2884 阅读 · 0 评论 -
Qt QImage scaled方法缩放中的问题
或许你已经发现问题了,因为我们前面进行图像的缩小时,使用缩放比例是根据鼠标在屏幕上的位移计算得来的,这个缩放比是个double类型的数值。判断的方式是首先按照现有尺寸的长宽比,和给定size的高,计算出缩放之后的长。对比一下,只是一个简单的数值的修改,可比写了一个函数的方法简单多了, 而我,在计算了长宽比之后,还是选择了最初的size,多走了很多路。修改方法也是比较简单的,只是单纯的在计算之后,判断一下调用了 scale 之后的QSize和预期的size的大小,并且选择了较大者。原创 2023-04-16 21:15:05 · 2507 阅读 · 0 评论 -
QComboBox文字居中的几种实现方式
不知道你有没有遇到过这样的需求,将一个QComboBox的文字居中显示。我最近遇到了这样的需要,主要是要和其他的控件显示进行匹配,这也就要求我们必须将下拉列表的文字居中显示。这种需求可能实现的方式会有好多种,但我一直坚信,能用原生的就用原生的,或者在原生的控件之上进行一些特例化的改动,让其满足我们的需求是最简单的方式,并且不会过多的影响样式表设置。所以这儿我还是选择了QComboBox,而我们要做的事情就是怎样将他的文字居中显示。...原创 2022-08-26 18:02:45 · 8669 阅读 · 2 评论 -
Qt自定义控件--pagenavigation(页面导航)
自定义组件是我们开发过程中一定会遇到的情况。实现的这个页面导航具备了基本的页面导航的功能,以及可以切换的样式表。原创 2022-07-14 22:07:35 · 1888 阅读 · 1 评论 -
Qt自定义SearchLine控件--实现按钮及相应功能
今天看一个搜索框的自定义。实现的功能是:效果如下:我们选择继承QLineEdit类来实现,这样是最简单最快的方式。在构造的时候调用,在QLineEdit 上new 一个 QPushbutton,并且将QPushbutton移到 QLineEdit 的末尾。使得该按钮被点击的时候发送 textEdit 信号即可。...原创 2022-07-07 21:26:16 · 619 阅读 · 0 评论 -
Qt自定义DateTime控件--实现日历及时间选择器自定义
怎样能够完全地实现一个不用其他控件就能正常使用的控件。最近尝试了下,使用了Qt的基础控件实现了一个完全自定义的日历控件,顺便改良了一下以前的时间选择器,测试效果还可以。终于实现了自定义的DateTime控件。......原创 2022-07-06 21:46:31 · 11457 阅读 · 10 评论 -
Qt 信号和槽机制
Qt在不同对象之间使用信号槽通信的,那么什么是信号槽,信号槽的本质知道吗?他们之间是怎么通信的,既然已经有了回调,为什么还要有信号槽?信号槽的第五个参数决定了他们的关联方式,队列关联和阻塞队列关联知道吗?阻塞是怎么阻塞的。能不能详细说说。原创 2022-03-30 21:34:49 · 4631 阅读 · 0 评论 -
Qt实现时间范围选择
以前我们写过一篇利用Qt ScrollBar实现滚动屏时间选择器的文章,也写过一篇QComboBox自定义设置 - 下拉列表自定义为表格的文章,今天我们就利用前面已经完成的这两篇文章实现一个时间范围选择的控件。首先我们看下效果。看完了效果之后,我们对上面的这个控件进行分解:最外层是一个QComboBox控件,只是该控件是我们自定义之后的下拉框中是一个QWidget,并且用了两个相同的datetime来实现时间选择的起始每个datetime中均有一个QCalendarWidget(日期)控件和一原创 2021-11-21 16:52:39 · 6214 阅读 · 10 评论 -
Qt自定义表格的实现,表格数据的读取、选择,内容提醒
前面我们有说过一篇,Qt自定义表格的文章,主要集中体现在自定义表头上,其实在Qt的很多界面开发上,自定义表格是很常见的一种操作。今天我们就看看怎么样自定义一个表格同样的,我们沿用上一个自定义的方式,使用两个影藏了表头的QTableWidget进行组合表格。而为了能够实现表头复选框的选中(半选中)和未选中三种状态的切换,并且能够缓存每行表格的数据,这次我们使用了自定义的复选框。如下,我们自定义CheckBox,继承自QCheckBox,并且重写他的mouseReleaseEvent 函数。重写该函数的目的原创 2021-10-31 10:04:27 · 6054 阅读 · 3 评论 -
QSettings实现记住密码
最近看到很多人都在看Qt怎么使用QSettings记住用户名密码。QSettings类提供了Qt对配置文件的操作,最直接的是对 ini 配置文件的操作。用它来简单的做记住用户名密码的操作是有局限性的。因为如果是简单的最直接的操作并没有做其他操作的话,ini 配置文件是明文的,相对来说,是数据不安全的。特别是针对密码这种很敏感的信息来说。我们用QSettings类来操作ini文件。下面我们先定义几个宏定义函数,方便后面的操作。定义这几个函数的目的是为了偷懒,毕竟如果后续可能会有很多的相同的代码。#d原创 2021-10-01 17:04:49 · 1560 阅读 · 0 评论 -
Qt 自定义控件实现一些不重要但很膈应的功能
最近在做需求的时候,总是会发现一些比较尴尬的事情,每个控件的基本功能都有,但就是无论怎么修修补补都不能满足自己想要的效果。有时候强行实现了,却看到了非常多的补丁。就好像新买的裤子,还没穿就已经被打了一个一个的补丁。难看,并且很膈应。特别是在我们都在追求极简以及完美代码的时候。所以针对这样一些比较尴尬的追求,总结了一些经验。**需求1、**使用QButtonGroup按钮组实现了多级菜单的切换,在菜单切换的时候,需要检查切换前的菜单有没有被更改,如果有,则进行提示。确认之后才能进行切换。这是什么鬼东西啊原创 2021-07-27 22:36:36 · 782 阅读 · 3 评论 -
Qt 中 deleteLater() 函数的使用
有时候写代码时总是忘记delete一些自己new的对象,每次都是在整个类写完之后对整个类的资源做回收。也是相当于检查一遍,避免一些未被处理资源。而这两天在检查的时候,发现了一个比较好的写法,obj->deleteLater();这种写法,按照字面意思理解,就是对象延迟析构。go语言中有一个延迟执行的语句,非常好用,比如:filePath := "e:/code/golang.txt"file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREA原创 2021-06-16 23:34:24 · 13649 阅读 · 1 评论 -
Qt 程序不重启实现自动翻译 -- 多语言切换
在做应用程序的过程中,多语言的切换是必不可少的功能,今天看一看怎么用Qt自带的翻译类 QTranslator 进行多语言之间的无缝切换,并且不会重启程序。首先我们看下实现效果:1、传统的设置语言的方法Qt的语言翻译主要是针对使用 Qtdesigner 设计的UI界面,对其上的一些语言进行翻译的过程。在这样的情况下,我们设置程序的语言一般都是在 main 函数里面实现。设置语言实现的顺序是有区别的。是在 QApplication 对象创建之后,主窗口创建之前进行设置。代码如下所示:int main(i原创 2021-06-13 13:53:21 · 6512 阅读 · 29 评论 -
Qt自定义事件的实现
今天在自定义软件蒙版的时候突然想到一件事,在做蒙版的过程中用到了Qt的事件过滤,结合以前面试的时候记得有人问我说一下什么是windows的消息机制,postMessage和sendMessage有什么区别,记得当时我听到这句话的时候心里无数的羊驼飞奔而过。后来仔细想一想,Qt虽然集成了很多的控件,方便了很多的新人开发,但同时也慢慢地消耗了我们学习和思考的能力。使我们变得不再追求底层的技术实现。突然想起,于是就去翻了翻Qt的事件,巩固巩固基础。我们都知道,Qt的基础就是在不停的做事件循环,但是这个事件究原创 2021-05-28 00:13:08 · 973 阅读 · 0 评论 -
Qt几种多线程的实现
1、继承Qthread类,并且重写run()方法代码完全在一个独立的线程中运行,需要继承QThread类,并且重写该类的run()方法。实现方式比较简单,线程在执行完run()函数之后退出。class WorkerThread : public QThread{ Q_OBJECTprotected: void run() Q_DECL_OVERRIDE { QString result; /* ... here is the expensive or原创 2021-03-04 22:45:37 · 1530 阅读 · 2 评论 -
Qt实现消息列表以及显示
目录1、消息内容2、消息的创建3、消息关闭4、右下角显示我们曾经用Qt的QListWidget控件实现了模拟微信联系人列表,今天利用该控件实现一个比较简单的错误消息的汇总显示组件。该组件默认隐藏,显示时在桌面的右下角弹出。比较符合一般软件的设计方案。因为是比较通用的错误消息的汇总中心,因此,对错误是不进行处理的,只做消息的显示。错误消息由谁创建则由谁关闭,实现良性的闭环。先来看下整体的效果图。1、消息内容消息的状态消息的状态显示为消息是否被阅读,我们使用给每条消息添加红色圆点来标记消息是否已原创 2021-03-01 23:48:13 · 2982 阅读 · 0 评论 -
简单的矩阵控件-Matrix
很多文章,不知道怎么开头,就搁置下来了,以至于现在脑中有了好几篇文章的构思,却还是在脑海中的阶段。。。仿佛下手是件很难的事情。所以今天干脆以这个做为开头了。好了,接下来要说回正事了。先看下效果图:1、我们要实现一个m * n(m和n可相等)的矩阵,同时在Qt的帮助文档里面,我们发现已经有了mxn(m <= 4, n <= 4)的矩阵,但并没有提供相应的界面显示的控件。因此,我们使用QDoubleSpinBox来实现一个m*n矩阵的界面显示控件。首先我们来看一下类的定义。class原创 2021-02-21 20:46:11 · 644 阅读 · 0 评论 -
Qt防止同步请求界面卡死
@TOC1、一念、一瞬、一弹指古代的梵典《僧祗律》中有这样的记载:一刹那者为一念,二十念为一瞬,二十瞬为一弹指,二十弹指为一罗预,二十罗预为一须臾,一日一夜有三十须臾。根据时间推算,一须臾为48分钟,一弹指为7.2秒,一瞬为0.36秒,一念为0.018秒。而我们在使用Qt做应用程序中,同步请求是必不可少的操作,但当同步请求耗时比较久呢?理想状态下,页面之间的跳转需要在瞬间解决,而页面内的操作需要在刹那间完成。实际情况之下呢?似乎都没有那么在意,慢慢的,会给我们造成一种潜意识,软件,慢一点是正常。是原创 2020-12-04 20:39:54 · 890 阅读 · 0 评论 -
Qt 自定义表格(表头)
搬砖的过程中中,我们经常会遇到定制化的表格,比如表头的第一列为全选复选框,或者需要依赖表头的某一咧进行排序,当然,排序这个原有的QTableWidget已经实现了功能,但是如果需要在该列的表头添加icon图片,则会显得比较麻烦。因此,自定义表格的实现还是显得比较重要,我们使用两个去除原有表头的QTableWidget来实现自定义表格,使我们在平常的使用过程中显得比较方便。相对来说,组合表格实现的方式还是比较简单的,首先我们先看下表头的首列为全选复选框时,我们怎么创建单元格。QWidget* Table原创 2020-09-10 22:12:16 · 3088 阅读 · 0 评论 -
Qt 实现密码等级的校验
做应用程序的过程中,总是会涉及到用户管理,涉及到用户管理,那么总是避免不了需要涉及到用户密码的设置。今天我们看看怎么用Qt来管理用户密码,实现用户密码等级的设定。首先我们设定一下密码强度的规则:密码只能输入数字和字母(大小写敏感)密码长度在6-8之间,必须包含数字以及字母(大小写不敏感), 此为密码最低等级密码长度在8-16之间,必须包含数字以及字母(大小写其中一种),此为密码中间等级密码长度在8-16,并且满足同时包含数字、小写字母、大写字母时为密码最强等级先来看下效果,为了能够直观的显示原创 2020-08-27 00:25:02 · 1471 阅读 · 0 评论 -
Qt 使用QDialog实现界面遮罩(蒙版)
写应用程序的过程中,弹窗是个避免不了的功能,显示中,假设弹窗背景色和主窗口背景色相差不多,甚至是一样的时候,就会存在一个比较严重的人机交互和UI显示的问题,找到弹窗的边界是比较麻烦的一件事。但是如果我们能在弹窗显示的时候被主窗口其他的部位增加一个背景色,这个背景色与弹窗的背景色形成比较大的色差,那么是不是就能够很容易的找到弹窗的边界。因此,我们实现一个自定义组件,可随便设置需要遮罩的主窗口,并且能够让其跟随主窗口的移动而移动。根据需求功能,我们需要提供设置主窗口的接口,同样的,并不是说所有的窗口都需要进原创 2020-08-19 08:56:13 · 5461 阅读 · 8 评论 -
QComboBox自定义(二)--下拉列表定制为表格
上一节我们看了下拉框为类似QQ登陆界面的实现,然后我们今天来看看怎么将表格定制在下拉列表中,这次主要实现为在表格中有N多图标,通过选择,可在QComboBox中显示并且能够获取到图标的名称。先来看下效果:首先,我们自定义一个table,继承自QtableWidget。class TableWidget : public QTableWidget{ Q_OBJECTpublic: explicit TableWidget(QWidget *parent = Q_NULLPTR); ~Tabl原创 2020-09-10 23:41:35 · 2179 阅读 · 0 评论 -
QComboBox自定义(一)--类似QQ登陆界面的下拉框
刚学Qt的时候,初步经历的第一个学习项目基本上都是LANQQ,初识时,不懂QSS,不懂布局,绘制界面最简单的方式成了使用designer拉满整个界面的控件,或者使用代码写了一些很蹩脚的布局。也是很羡慕别人哪些精致的界面,印象很深的是QQ登陆界面的下来列表,下面,我们简单的来介绍下怎样做到和QQ登陆界面一样的下拉列表。先看一下效果:没有做qss的美化,简单的实现了下功能,如果需要在显示名称的部分也需要显示头像的话,也是可以,这个在下一节自定义控件的时候再看。简单的改造了一下上次的ListTemplat原创 2020-07-27 08:19:25 · 1986 阅读 · 0 评论 -
Qt 自定义IP输入控件
最近遇到一个需要IP端口的需求,而且量并不少,每次在对这个输入框处理的时候很麻烦,想着是不是可以独立出来一个单独的控件,方便以后使用,试着找了几种方法来实现一下。1、使用QLineEdit的inputMask方法使用该方法比较简单,一种是直接在designer界面中输入,另一种是通过代码进行设置,其中比较重要的是mask的格式。mask 格式如下:000.000.000.000使用这种方式能够正常的输入IP,但存在的问题是,设置完mask之后,就相当于对QLineEdit进行了占位,每一格都是三位,假原创 2020-07-21 08:30:37 · 2885 阅读 · 1 评论 -
Qt QTreeWidget的级联选中
在使用QTreeWidget显示文件树时,需要对树的节点做一些功能的限制:勾选某一节点时,该节点的子项自动全部选中子项部分勾选时,父节点状态为部分勾选子项全部勾选时,父节点自动设置勾选首先,查看了Qt文档,发现竟然没有提供这个功能,所以自己写了一个简单的例子。QTreeWidget在添加节点时,其节点前面的复选框默认时不显示的,而要显示复选框,我们则需要通过QTreeWidgetItem的方法来设置。void QTreeWidgetItem::setCheckState(int column原创 2020-06-30 23:19:57 · 3019 阅读 · 2 评论 -
CSS3图片旋转
转自:http://www.pengyaou.com/codecss3/POKDNMS_95.html #contentMain{ margin-bottom:50px;}.Item { width: 150px; height: 150px; margin-top: 100px; margin-left: 300px; position: ab转载 2016-01-30 11:34:48 · 657 阅读 · 0 评论 -
Qt实现模拟微信联系人列表
联系人列表主要由两部分组成,每个联系人的状态消息框和一个列表组成,因此,我们用QListWidget和自定义的item来实现这个列表。1、自定义message item如图:一个item由头像、昵称、最近的一条消息、最近一条消息的时间和关闭按钮组成,因此我们首先用designer按照需要的东西选择合适的控件进行绘制界面。界面绘制完成之后,就需要完成界面所需要的一些槽函数,在这边,我们应该有一个主题思想是需要确定的,就是每个item所需要的数据由自己管理,这样,在管理这些数据的时候就会比较方便, 会原创 2020-06-30 00:36:25 · 2572 阅读 · 0 评论 -
Qt自定义控件的实现与使用
这里写自定义目录标题前言自定义控件的创建自定义控件的使用前言Qt已经提供了很多的基础控件供开发使用,而Qt原生的控件有时候并不能满足我们的需求,特别是在工业的运用上,比如我们需要一个日期时间的选择器,Qt虽然已经提供了原生的QDateTime控件,但这个原生控件并不能满足我们的需求,又比如我们需要实现类似微信左侧的消息列表,单纯的原生QListWidget(QListView)并不能完整的满足需求,这个时候我们就会寻找一种可以满足我们需求的控件。而Qt提供了自定义控件的功能,我们可以通过QtCreato原创 2020-06-11 11:41:12 · 6227 阅读 · 5 评论 -
Andiord NDK和SDK下载网址
Android NDK r7b Windows http://dl.google.com/android/ndk/android-ndk-r7b-windows.zip Mac OS X (intel) http://dl.google.com/android/ndk/android-ndk-r7b-darwin-x86.tar.bz2 Linux 3原创 2016-03-09 15:00:25 · 585 阅读 · 0 评论 -
html设置Qwebview滚动条的样式风格
今天有点空闲,想起来上次有个QWebview的滚动条的style,一直都没有实现,就用html5试了一下,虽然不好看,也有好几个功能还没有实现,现在将自己写的分享出来,大神勿喷,还望不吝赐教。先看看一些滚动条设置的属性:overflow-x:hidden; /*隐藏底部的横向滚动条*/scrollbar-arrow-color: #f4ae21; /*三角箭头原创 2016-03-11 16:39:55 · 2853 阅读 · 2 评论 -
Qt 中 QListWidget 获取itemWidget() 失败
前两天在测试的时候,发现QListWidget 类 调用 listWidget->itemWidget(pItem) 函数时返回了Q_NULLPTR,这不是一个平常会遇到的问题,探查了一下资料,找到了问题的原因,记录一下这个问题。首先,我们创建一个简单的QListWidget,并且自定义其item:namespace Ui { class Item;}class Item : public QWidget{ Q_OBJECTpublic: explicit Item(const Q原创 2020-05-22 16:00:09 · 2672 阅读 · 0 评论 -
Qt QPushButton设置菜单
文章目录1、常规模式2、非常规模式基本上,我们遇见的各种软件,最上方都有一行菜单栏,菜单栏实现了各种功能,Qt的QMainWindow控件提供了MenuBar,可在MenuBar上方便的添加菜单,但是有时候我们并不需要很多的菜单,有一个就够了,这个时候如果还使用MenuBar,那么在界面显示上会显得不是那么美观。因此我们会找更好的方法进行菜单的设置,使用QPushButton和菜单结合起来使用就...原创 2020-04-11 00:04:43 · 3502 阅读 · 0 评论 -
Qt线程处理图片(绘画、压缩、保存、压缩图片的读取)
文章目录1、绘画2、压缩3、保存4、读取1、绘画Qt提供了QPainter类来对图片进行绘画,提供了QImage类对图片进行压缩和保存。如果图片显示在UI上,我们就能够很正常的使用QPaintEvent函数对图片进行绘画的操作,但有时候,我们需要批量处理图片,并且在处理这些图片的过程中图片是不可现的。那么我们就需要开启线程去处理这些图片。前段时间在线程处理图片时踩了一些坑,将这些坑分享一下...原创 2020-04-06 10:49:09 · 3047 阅读 · 0 评论 -
Qt生成随机字符串
取随机字符的形式生成 QString ResultClient::getRandomString(int nLen) { qsrand(QDateTime::currentMSecsSinceEpoch()); const char ch[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int siz...原创 2020-03-30 19:53:57 · 3828 阅读 · 0 评论 -
QT 更改本地时间
QT有提供QDateTime类,该类能够很方便的获取本地的系统时间,但是并没有提供设置本地系统时间的方法。windows系统下: 设置本地系统时间有两种方法,一种是调用系统的接口设置,另一种是通过系统命令行设置。 QDateTime datetime; //设定要修改的系统时间,为了方便,直接调用了Qt的接口获取了本地系统时间 datetime = QDateT...原创 2020-03-30 15:34:47 · 6262 阅读 · 1 评论