粉丝1.8万获赞20.5万

上期视频我们说了 q t 的优点,那么这期视频呢,我们聊一下 q t 有哪些缺点。使用了一些非标准的 cd, 加 库太大,什么都有,几乎什么都能做,导致他的 bug。 也有很多原声的 word 引擎因为版权问题不支持音频播放,所以呢,需要自己编原码,加上音频支持,性能表现不是特别优秀等。 当然了,这些是一些抽象且普遍被人提及的优缺点,涉及到一些句子的特点或者不为人知的,需要实践得来的一些缺点,不会在百科类的文章中找到, 需要真正用过之后才能会发现你。比如说信号与槽道效率问题。信号槽的性能问题一般情况下是比较难以感知,但是在对延时敏感的功能中,如需要计算时间戳或者是视听视觉的功能,过多的使用信号槽 可能会带来明显的延时。这种情况呢,采用回调方式会更可取。效率的问题主要是 qt 信号槽机制设计的函数查找以及参数传递,其中包括列表操作、事件处理啊,一线程中所的处理。一般情况下呢,信号槽与回调的效率有十倍之差,情况复杂的情况下 远超过十倍。 q t 的 u i 绘制、事件传递、网络模块儿等功能都非常依赖信号槽的机制,这也同时意味着 q u t 的运行效率如果深究起来可能算不得优异, 但由于它使用的是 c 加框架,性能始终不会太差。还有网络模块的性能问题, qt 内的沃壳模块性能差强人意。前面提到信号操机制的影响,此外并发和数据传输性能均比较低,这与 qt 底层机制与架构有关系,使用 qt 网络模块 块开发小型功能没有问题,大型系统可以选用其他的库,毕竟刺激家乡空的网络库也非常多的。另外还有 q t v g 的性能问题,前文提到我信号又调到问题, q t v g 特中涉及了大量的绘图事件和信号传递,这是对效率的第一大影响。 此外呢, qtv 的图像渲染都不是自绘,不存在意念加速,如果场景变得复杂,性能会有明显的影响。虽然跨客 与 q m l 可以支持硬件加速,支持 open g l 图形渲染,性能也非常强悍,但跨口和 q m l 存在硬件兼容问题。 我们开发产品过程中曾经做过 q t 四前一道 q t 五的尝试,希望能更多的利用跨客突的强大性能与功能。但没想到在 h d grow face 三千显卡或低级别显卡中不能运行,导致打开 程序即崩溃或者是白屏,也尝试过自行变异 kt 原码,使用不同的选项参数,但最后都没有解决这个问题。所以后来呢,我们产品中也没有在使用跨可突的功能。世界上没有完美的编程语言,也没有完美的程序框架, 就像你搞对象一样,你选择了他的优点,那么你就要接受他的缺点。我只是作为一个使用了 qt 八年的程序员,把自己这些年的经验分享出来,希望可以帮助到需要的人,顺便赚点流量。 但是不知道为什么,最近总有人在评论区给我抬杠,上期视频我发了一个 q t 都有什么优点?有个人给我评论说他的缺点就是除了卖客卖人头基本不赚钱。这个评论呢,我看着很不爽,但是我也没有去删,在上期视频中,你们可以自己去看,关注我时间久的朋友们都知道,老王什么时候卖过客, 什么时候卖过人头。至于学习 qt 到底能不能找到工作,能不能赚到钱,去看一下招聘网站就知道了,没必要在这为了黑而黑,不是每一个做技术的博主都是麦克卖人头的好吗?虽然我们做视频号都是想赚流量赚钱,但是想赚钱有什么问题吗? 至少有一点,我是可以保证我不会赚黑心钱,我也不会去坑别人。我接个毕业设计总可以吧,我接个私活干干总没问题吧? 我带货卖本学习 qt 需要的书也没有什么问题吧?挣钱嘛,生意不寒颤。好了,程序书写人生,代码改变世界,我是爱编程。老王,如果你对代码感兴趣,对技术感兴趣,欢迎关注我,一起吹牛! 天灵灵地灵灵,喷子喷子快走开!天灵灵地灵灵,黑子,黑子也走开!

各位同学好,欢迎大家来到用 qt 六创建 g y 程序微课堂,这节课主要介绍分组框控件。在 qt 六中,分组框控件是一种容器控件, 我们可以将其他控件放置到容器控件内,容器控件被作为其他控件的副容器或载体。我们可以使用多种容器类创建多种容器控件。 q t 六中的容器类如下表所示,大家可以看一下这张表格。我们可以使用 q group box 类创建分组框空间。我们可以使用 q group area 类创建滚动区空间。 我们可以使用 q stack widget 类创建堆叠空间。我们可以使用 q widget 类创建容器窗口空间。我们可以使用 q dock widget 类创建停靠窗口空间。 我们可以使用 q frame 类创建框架空间。我们可以使用 q type widget 类创建切换卡空间。我们可以使用 q toolbox 类创建工具箱空间。 我们可以使用 q m d i area 类创建多文档区。我们可以使用 q a x widget 类创建插件窗口控件。 这些容器类正好对应了 q t 设计师中的控件,如下图示。我们可以在 q t 设计师的窗口部件盒中的 container 栏下查看对应的控件。大家可以看一下这张图片, 比如 cue group box 类正好对应了 group box 控件。比如 cue frame 类正好对应了 frame 控件。比如 cue widget 类正好对应了 widget 控件。 这节课我们主要介绍分组框控件。分组框控件可以容纳一组单选按钮或复选框按钮,并带有一个边框和标题栏,而且可以为标题栏设置勾选项。 在 q t 六中,我们使用 q group box 类创建分组框控件。 q group box 类的构造函数如下所示,其中第一个构造函数有一个参数,第二个构造函数有两个参数,其中参数 parent 表示指向负窗口或负容器的对象,指向指向指向, 其中参数 title 表示分组框控件上显示的文本。 q group box 类中方装的方法是比较多的,大家可以看一下这张表格,这张表格罗列了 q group box 类的方法, 比如,我们可以使用 settable 设置标题栏上是否有勾选项,比如,我们可以使用 set title 设置标题的名称。 比如,我们可以使用 resize 方法设置分组框控件的宽度高度。比如,我们可以使用 set layout 方法设置分组框中的布局。 下面我们做一个例题演示,实践一下。冲进一个窗口,窗口中有一个分组框控件,分组框控件中有五个单选按钮,我们演示实践一下。 首先我们打开 qt creator, 然后单机创建项目。在弹出的对话框中,我们选择 qt widgets application 模板,然后单机 enter 键。 在这个对话框中,我们将创建的项目命名为 demo 十, 并将该项目保存在 d 盘的 chapter 文件夹下,然后点击下一步按钮,然后点击下一步按钮。 在这个对话框中,我们设置窗口类的基类为 q widget, 并取消勾选这个复选框,这表明我们创建的项目中没有 ui 文件。然后点击下一步按钮,然后点击下一步按钮,然后点击下一步按钮, 然后点击完成按钮。在这个项目的管理目录中,我们首先展开头文件,然后双击打开这个窗口类的头文件编辑点 h, 然后我们在这个窗口类的头文件中编写代码。首先我们要包含 q radio button 类, 然后我们包含 q group box 类, 然后我们包含 q h box layout 类, 然后我们包含字体类。 然后我们在这个窗口类的定义中使用 q group box 类创建一个对象指向, 我们创建的对象指向的名称为 group。 然后我们使用 q radio button 类创建五个对象指向指针, 我们创建的这五个对象指向的名称分别为 radio 一, radio 二, radio 三, radio 四, radio 五。然后我们使用 q h box layout 类创建一个对象指向指针。 我们这个地方并没有引入 q h box 类,所以说我们这个地方修改一下,这个地方要引入 q h box 域 out 类。 然后呢,我们在这个地方输入 q h box 域 out 类 定义的这个对象指向的名称为 h box, 按 ctrl s 保存。 然后我们双击打开这个窗口内的原文件 vd 点 c p p 在 这个窗口内的原文件中,我们首先更改文本设置,这样显示的更简洁。 然后我们在这个窗口内的构造函数中编写代码。首先我们使用 set geometry 这个方法设置窗口的位置和宽高, 然后我们使用 set window title 这个方法设置窗口的标题, 我们设置窗口的标题为 cue group box 类。 然后我们使用 set function 这个方法设置窗口的字体格式, 我们设置的字体格式为黑体,字号为十四。 然后我们使用 new 运算符创建一个分组框控件,并将该控件的首地址赋值给对象时针 group, 注意这个地方有一个参数 this 时针。然后我们使用 group 的 set title 这个方法设置分组框控件的标题, 我们设置的标题为选择北宋时期的人物。 然后我们使用 new 运算符创建一个单选按钮,并将该按钮的首地址复制给对象,指向 redo 一, 这个单选按钮上显示的文本为李白。 然后我们按照同样的方法创建第二、三、四、五个单选按钮。由于代码比较相似,所以我们直接在这个地方复制粘贴。 然后我们使用 new 运算符创建第二个单选按钮,并将该按钮的首地址赋值给对象。指向指令 radio 二, 第二个单选按钮上显示的文本为杜甫。 然后我们使用 new 运算符创建第三个单选按钮,并将该按钮的首地址赋值给对象职称 radio 三,这个按钮上显示的文本为苏式。 然后我们使用 new 运算符创建第四个单选按钮,并将该按钮的首地址复制给对象,指向执行 redo 四,这个按钮上显示的文本为桃源名。 然后我们使用 new 运算符创建第五个单选按钮,并将该按钮的首地址复制给对象,指向执行 redo 五,这个按钮上显示的文本为司马迁。 然后我们使用 new 运算符创建一个水平布局对象,并将该对象的首地址复制给对象,指向 hbox, 注意这个地方没有参数。然后我们使用 hbox 的 a, d, d widget 这个方法将 radio 一 添加到 hbox 中。 然后我们按照同样的方法将其他的单选按钮添加到这个水平布局对象中。由于代码比较相似,所以我们在这个地方直接复制粘贴 这个地方呢是添加的单选按钮控件 radio 一, 这个地方是添加的 radio 二,这个地方添加的是 radio 三,这个地方添加的是 radio 四,这个地方添加的是 radio 五, 然后我们使用 group set layout 这个方法设置分组框控键的布局为 hbox, 按 ctrl s 保存,然后我们单机运行按钮,运行一下这个项目, 大家可以看一下,已经显示了这个窗口,在这个窗口中有一个分组框控件,我们向这个分组框控件中添加了五个单选按钮,并给这个分组框控件设置了标题, 这五个单选按钮是互斥的,比如我们选择李白,然后再选择杜甫,那么会取消其他单选按钮的选择状态,然后我们再选择苏轼, 则会取消其他单选按钮的勾选状态,然后我们选择陶渊明,同样他会取消其他单选按钮的勾选状态,这个呢就是互斥状态。我们关闭一下这个窗口, 然后关闭 demo 时,我们在这个地方呢,可以不使用这行代码,我们只需要在创建这个水平布局对象时设置它的副窗口呢为 group, 按 ctrl s 保存,然后我们单机运行按钮,运行一下这个项目, 大家可以看一下这个窗口显示了同样的效果。在这个窗口中有一个分组框控件,分组框控件中有五个单选按钮,这五个单选按钮之间是互斥的,这个呢就是分组框控件。

各位同学好,欢迎大家来到用 qt 六创建 jy 程序微课堂,这节课主要介绍框架控件。在 qt 六中,框架控件可以容纳各种窗口控件, 但框架控件没有自己特有的信号或槽函数,不接受用户的输入信息。 我们可以使用 q frame 类创建框架控件。 q frame 类的构造函数如下所示, 这个构造函数有两个参数,其中参数 parent 表示指向负窗口或负容器的对象,指针对于第二个参数保持默认即可。 q frame 类中封装的方法是比较多的,这张表格只展示了其中的一部分,大家可以看一下这张表格。 比如我们可以使用 set frame shadow 方法设置框架空间的阴影形式,我们可以使用 frame shadow 方法获取窗口的阴影形式。我们可以使用 frame rect 方法获取框架空间所在的范围。 下面我们做一个例题演示,实践一下。创建一个窗口,窗口中有一个显示边框的框架控件,框架控件内部是一个登录界面,我们演示实践一下。首先我们打开 qt creator, 由于这个项目中的代码比较长,所以我们已经提前将这个项目的代码编辑好了。 大家可以看一下这个项目的管理目录数,我们从这个项目的管理目录中可以看出,我们选择的模板为 qt widgets application, 这个项目中没有 u r 文件。 然后呢,我们单机运行按钮运行一下这个项目,大家可以看一下,已经显示了运行窗口,在这个运行窗口中有一个框架控件,框架控件中 是一个登录界面,这个登录界面呢,是使用了表单布局,然后我们关闭窗口, 然后我们关闭呆猫。十二,首先呢,我们打开这个窗口类的原文件 weid 点 h。 下面呢,我们讲解一下这个代码。 首先我们要包含 q frame 类,然后包含 q label 类,然后包含 q line edit 类,然后包含 q form layout 类。 然后我们在这个窗口类的定义中,使用 q frame 类创建了一个对象指征,这个对象指征的名称为 frame 一。 然后我们使用 q label 类创建了两个对象指征,这两个对象指征的名称分别为 name code。 然后我们使用 q line edit 类创建了两个对象指向,这两个对象指向的名称分别为 line edit 一, line edit 二, 然后我们使用 q post 八零类创建了两个对象指征,这两个对象指征的名称分别为 b t n 一, b t n 二。然后我们使用 q form layout 类创建了一个对象指征,这个对象指征的名称为 form。 然后我们双击打开窗口类的源文件 web 点 c p p。 下面呢,我们讲解一下这个源文件中的代码。 在这个窗口类的构造函数中,我们首先使用 set geometry 这个方法设置了窗口的位置和宽高,然后我们使用 set window title 方法设置了窗口的标题。 然后我们使用 new 运算符创建了一个框架控件,并将该控件的首地址赋值给对象指向 frame 一, 然后我们使用 frame 一 的 set frame shape 方法设置框架的边框形状。 然后我们使用 new 运算符创建了一个标签控件,并将该标签控件的手地址复制给对象指定 name, 这个标签控件上显示的文本为账号 user name。 然后我们使用 new 运算符创建了第二个标签控件,并将该控件的手地址复制给对象。指定 code, 这个标签控件上显示的文本为账号 password。 然后我们使用 n 运算符创建了一个单行文本框,并将该控件的首地址复制给对象。指令 line a 一。 然后我们使用 n 运算符创建了第二个单行文本框,并将该控件的首地址复制给对象。指令 line a 二。 然后我们使用扭运算符创建了一个按压按钮控件,并将该控件的手地址复制给对象。指贞 b t n 一, 这个按钮上显示的文本为确定。 然后我们使用扭运算符创建的第二个按压按钮控件,并将该控件的手地址复制给对象。指贞 b t 二,这个按压按钮控件上显示的文本为取消。 然后我们使用 new 运算符创建了一个表单布局对象,并将该对象的首地址复制给对象。指向 form, 然后我们使用 form 的 a d d 样这个方法向表单布局中添加了四行,其中第一行左列是标签空间,右列是单行文本输入框, 第二行左列是标签控件,右列是单行文本框,第三行的左右两列都是按压按钮, 第四行的左右两列都是按压按钮。然后我们使用 frame 一 对象的 set layout 方法设置了框架控件的布局方式为表单布局,然后我们单机运行按钮,再运行一下这个项目。 大家可以看一下这个窗口,这个窗口中有一个控架控件,控架控件中是一个登录界面, 有账号,然后单行文本输入框密码,然后是单行文本输入框,下面呢是两个按压按钮,确定和取消。