推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

Qt-跨平台的C++图形用户界面应用程序框架(一)

   2023-07-22 网络整理佚名1870
核心提示:Qt是一个跨平台的C++图形用户界面应用程序框架。;剩下的图形页面以及与操作系统交互的模块都是使用Qt进行开发的。提供了一套非常好上手的图形界面构建工具,即使是刚接触Qt的小白也可以轻松的绘制出想要的页面并且能够完成核心页面逻辑。当指定的信号发出时,槽所在的对象就能接收到该信号,从而调用相应的槽函数执行指定的处理。当指定的信号发出时,槽所在的对象就能接收到该信号,从而调用相应的槽函数执行指定的处理。信号与槽机制与普通函数的调用一样,如果使用不当的话,在程序执行时也有可能产生死循环。

Qt简介

Qt 是一个跨平台的 C++ GUI 应用程序框架。 早在1991年,奇趣科技的两个合作伙伴就开始开发这样一个平台。 2008年,如火如荼的诺基亚看好Qt在嵌入式领域的潜力,斥巨资收购其作为新一代智能手机操作系统的载体。 但由于诺基亚在智能手机领域的失败,不得不放弃Qt。 最终,Qt在2012年被最后一个所有者Digia收购。经过几年的发展,Qt不仅拥有完整的C++图形库,而且大大提高了Qt开发跨平台应用程序的能力。

Qt可以同时支持桌面应用程序开发、嵌入式开发和移动开发,甚至可以做移动开发,覆盖现有的所有主流平台。 您只需编写一次代码并重新编译即可发布到不同平台。

哪些产品是用Qt开发的?

凭借一整套支持原生、Mac、Linux等平台的GUI库和丰富的API库,Qt成为开发跨平台桌面应用程序的不错选择。 与国内一些优秀的桌面软件选择开发自己的多平台GUI库不同,国外很多优秀的桌面应用程序更喜欢使用跨平台的GUI库进行开发。 比如硅谷有名的文档管理应用,微软自己的社交聊天工具Skype,很多大型游戏的GUI页面,甚至还有国内金山公司推出的办公软件WPS,当然还有我们的。

为什么选择Qt?

因为Qt不仅可以高效地完成不同平台上GUI内容的开发,还可以高效地完成系统层面的一些任务。 这也是选择使用Qt开发的原因。

其实它包含两个主要流程,一是同步盘的引擎——C语言构建的底层同步流程,我们称之为;二是同步盘的引擎。 其余与操作系统交互的图形页面和模块都是使用Qt开发的。 Qt提供的丰富的跨平台GUI组件可以保证在不同的操作系统中美观并与操作系统的风格保持一致。 Qt自己的IDE——Qt提供了一套非常好用的图形界面构建工具。 即使是刚接触Qt的小白也能轻松绘制出想要的页面,完成核心页面逻辑。 另外,得益于C++的加持,Qt与操作系统有着非常健壮的通信机制。 这样就可以轻松准确地监控操作系统中文件的变化、建立本地数据库进行数据写入等操作。 不仅如此,优秀的混合编程能力让Qt可以轻松地与-C、C#等语言混合实现系统级扩展调用。 这就是为什么我们可以在资源管理器中看到同步磁盘文件的不同状态。

Qt的优点 优秀的跨平台特性

Qt支持、Linux/Unix、Mac OS X、、、QNX等平台,并为这些不同平台提供了统一的开发环境。

【更多音视频+QT学习资料,点击下方链接免费获取↓↓,首码直播不迷路~】

点击领取→音视频开发基础知识资料包

面向对象

C++是完全面向对象的,这和-c等的开发很相似。 而Qt是基于C++的语言扩展。 大家都知道C++具有快速、简单、面向对象等诸多优点,所以Qt自然继承了C++的优点。

Qt良好的封装机制使得Qt具有高度的模块化和可重用性,非常方便用户开发新产品。 Qt 为 /slots(信号和槽)提供了安全类型,从而使各个组件之间的协作变得非常简单。

丰富的API

Qt 包含 250 多个 C++ 类,还提供基于模板的、文件、I/、日期/时间类。 它甚至包括正则表达式处理功能。

支持2D/3D图形渲染,支持。

广泛的开发文档。

XML支持

引擎的集成可以实现本地界面和网页内容的无缝集成,但真正让Qt在众多免费软件(如Gtk、EZWGL、fltk等)中脱颖而出的是基于Qt的重量级软件KDE。

信号和槽机制

Qt提供了信号和槽机制来完成会议操作的响应,这是任意两个Qt对象的通信机制。 其中,信号在特定情况或动作下会被触发,而槽就是相当于接收并处理信号的功能。

为什么不直接调用该方法。 中间用sum槽机制不是多余吗?

其实我们生活中也是如此。 老板级别好说,老板给助理分配任务。 说起来容易,助理却给老板分配任务。 后果可想而知。 以前的统治阶级是绝对不允许这样的事情发生的。 因此,在层次思维中,我们调用的函数也是这样的。 上层可以调用下层和同层的函数,下层函数不能调用上层函数,否则会破坏程序的层次性,导致结构复杂,难以维护和管理。

那么如何才能实现向上管理呢? 如果有任务分配给老板怎么办?

老板会设置一个机制,就是一个函数,用无限循环来查询助理的状态。 如果助理真的有事情要做,这个机制就会把消息带到老板那里去处理。 但这个处理方法似乎有点复杂。 我们想要的简单明了的方法是,如果助手中发生了事件,可以直接调用boss函数来处理。

说了这么多,我只想说信号和槽最大的优点就是它完善了程序分层的思想,可以在不改变程序分层的情况下完成从下层到上层的调用。 下层发送一个,上层关联的Slot函数就会响应。

现在,信号和槽的问题是:

要解决上述问题,需要连接相应的信号和槽。 当发送指定的信号时,槽所在的对象可以接收到该信号,然后调用相应的槽函数执行指定的处理。

信号和槽是如何连接的

1.一个信号可以连接到另一个信号

现在,信号和槽的问题是:

要解决上述问题,需要连接相应的信号和槽。 当发送指定的信号时,槽所在的对象可以接收到该信号,然后调用相应的槽函数执行指定的处理。

信号和槽是如何连接的

1.一个信号可以连接到另一个信号

(,(),,());

表示可以触发信号1发送的信号1发送。

2.同一个信号可以连接到多个槽:

(,(),,(插槽2));

(,(),,(插槽1));

3.同一个槽位可以响应多个信号:

(,(),,(插槽2));

(,(),,(插槽2));

4. 可以删除连接:

这种情况很少使用,因为当删除对象时,Qt 会自动删除与该对象相关的所有连接。

(, (), , SLOT(槽));

但常用的连接方式有:

 connect (Object1,SIGNAL(signal),Object2,SIGNAL(slot));

其中, 是对象的信号,slot 是对象的槽位。

#### Tips:信号和槽机制与普通函数的调用相同。 如果使用不当,程序执行过程中也可能出现死循环。 因此,在定义时隙函数时,必须注意避免间接形成无限循环,即重传时隙中接收到的相同信号。

如果一个信号与多个时隙相关联,则当该信号发出时,关联时隙被激活的顺序将是随机的。

宏定义不能用在 和 槽的参数中。

信号和槽必须具有相同数量和类型的参数。

信号槽机制型安全的优点

需要关联的信号和槽的签名必须相同。 即,该信号的参数类型和参数个数与接收该信号的时隙的参数类型和参数个数相同。 不过,一个时隙的参数个数可以少于信号的参数个数,但缺失的参数必须是信号参数的最后一个或几个参数。 如果信号和槽签名不匹配,编译器将报告错误。

松耦合

信号和槽机制大大降低了Qt对象的耦合性。 发送信号的 Qt 对象不需要知道哪个对象接收其信号。 它所需要做的就是在适当的时间发送一个信号,而它不需要知道或关心它的信号是否已经被接收到,更不用知道哪个对象的槽接收到了信号。

同样,Qt 对象的槽不需要与哪些信号连接到其自身有关。 如果信号和槽是连接的,Qt可以确保调用适当的槽。 即使关联的对象在运行时被删除。 应用程序也不会崩溃。

信号和时隙的效率

信号和槽机制增强了对象之间通信的灵活性。 当然,在增加灵活性的同时,性能上也会有一定的损失。 与我们的回调函数相比,信号和槽机制有点慢。 通常,通过传递信号来调用槽函数的运行速度比直接调用非虚函数慢 10 倍。

【更多音视频+QT学习资料,点击下方链接免费获取↓↓,首码直播不迷路~】

点击领取→音视频开发基础知识资料包

原因:

需要定位接收信号的物体。 安全地遍历所有关联。 编组/解组通过了争论。 当多线程时。 信号可能需要排队。

然而,信号和槽的操作成本只是创建和删除堆对象的操作成本的一小部分。 信号槽机制带来的性能损失对于实时应用来说可以忽略不计; 与信号和时隙提供的灵活性和简单性相比,这种性能损失是值得的。

Qt布局系统布局系统简介

作为一名iOS开发者,我见证了iOS布局系统的不断完善,从绝对布局到. 它使开发人员的工作更加高效,项目界面更加可读且易于维护。 如今IDE中的可视化界面工具非常强大,不少网友“戏称”iOS开发者为“UI拖拽高手”。 可见iOS开发中的界面布局系统是高效的。 因此,一个优秀的布局系统的使命就是让开发者花更少的时间完成一个更易于维护的界面。

同样,在Qt中,系统提供了强大的排版机制来布局窗口中的视图。 经过对Qt布局的初步探索,不得不对Qt布局系统的简洁、高效和强大的功能表示赞叹。

qt槽函数接受不到信号_qt信号槽机制的优缺点_qt信号槽优点

布局系统的特点

在 Qt 中,布局系统可以通过以下方式完成

布局系统的结构

Qt 提供了类及其子类来布局界面。 结构如下:

是布局系统中的抽象基类,继承自 和 ,四个子类分别是

在实际使用场景中,往往需要组合多种布局来完成界面设计。 接下来我们将分别介绍这四种布局。

盒子布局

Box布局提供了两个子类分别处理水平()和垂直()方向的布局,可以使视图按行或列显示。 简单来说,它可以让控件站成一排。 比如我们的项目中,最上面的头像、名字、刷新按钮排成一排,就是横向的盒子布局:

你以为我要讲的是如何实现这个东西吗? NO,我只是想以垂直盒子布局为例,用最简单的例子来介绍盒子布局的使用。 首先创建一个基础接口并添加我们需要使用的头文件:

#

#

并在构造函数中添加以下代码

// 添加两个按钮

*okBtn = 新;

okBtn ->(tr("我在上面,我是最好的"));

* = 新的;

->(tr("我在下面,我不服气"));

// 创建一个垂直框布局并将两个按钮放入其中

* = 新的;

->(okBtn);

->();

// 设置界面布局为垂直盒子布局

();

运行一下看看效果,啥? 这个可以跑吗? 坐标呢? 尺寸怎么样? 是的,你没有看错……点击运行:

两个按钮已经上下推了一下,就乖乖地垂直方向站了起来。 它是如此强大,如此无忧无虑。

表格布局

功能强大很外向,你可以轻松的与其他用户分享你的信息,当我们分享的时候,会有这样的界面:

看到这个界面,你可能会聪明地说,这很简单,几个横向的盒子布局就可以实现,但是更聪明的Qt提供了一种更高效的方式来帮助你完成这样的界面,那就是。

在我以前学Qt的书里,都会翻译成表单布局。 我个人认为翻译成表单布局更合适,因为Qt的强大之处就在于它可以用最快的速度完成一个表单界面的构建,供用户输入。

那么,让我们揭开神秘面纱,看看这样的接口是如何实现的。

首先,将一个Form拖入.

双击以向表单添加一行。

相信当你看到这张图的时候,你已经能够明白表单布局是如何使用的了。 提供标签作为用户输入内容的指南,提供字段类型作为用户输入的控件。 作为一名 iOS 开发人员,我知道构建这样一个界面所需的复杂工作量。 当我第一次打开这个界面时,我被界面的创建方式惊呆了。

【更多音视频+QT学习资料,点击下方链接免费获取↓↓,首码直播不迷路~】

点击领取→音视频开发基础知识资料包

根据图片,创建表单的第一行,即要共享的用户输入框,并填写输入框的占位符文本。 双击表单以创建具有字段类型的行(多选框)。 填写允许的权限内容。 将整个布局设置为垂直框布局。 拖拽Form下的一个(横向盒子布局)添加到盒子布局(横向占位符)拖拽两个Push即可完成界面布局

赶快? 赶快! 赶快!!!

同样,如果使用纯代码表单布局,则可以使用()方法添加一行。

网格布局

其实强大的就是这个,我们可以共享给多个用户,并且下面会有一个列表,显示共享的用户和权限的列表。 这时候表单布局已经不能满足我们了,所以我们不得不另寻新欢——网格布局。

顾名思义,网格布局可以将界面分为行和列进行布局管理,并将控件放置在每个单元格中。 因此,共享界面采用两行三列的网格布局来实现。

当然,对于比较复杂的界面,使用Qt布局的效率也非常高。 我做了一个外部链接共享的布局演示,可以生成内部数据的下载链接并共享给任何人下载。

在这个界面中,我在Tab内使用了网格布局,如图:

从图中可以看出,网格布局就像操作Excel、布局单元格、合并单元格等一样简单。

在这个界面中,更加灵活的利用属性来完成界面的布局。

同样,在代码中,可以使用下面的Api,从几行几列开始,向占据几行几列的网格视图中添加一个控件:

void (*, int 行, int , int , int )

堆栈布局

例如,在 中,我们可以通过云文件浏览器直接查看和操作云文件。 加载过程中,会出现一个菊花界面。

加载失败时的错误信息:

当加载成功时:

通常应用程序的界面根据不同的状态会有不同的内容。 这时候就可以使用栈布局了。 堆栈布局提供了页面的堆栈,每个页面都有完全独立的界面布局。 可以清晰的管理不同状态下的界面布局。

在Qt的可视化布局工具中,界面的堆栈布局是通过

右键单击可以执行页面的插入、删除、排序等操作。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON