Qt 可视化Ui设计

2023-11-07

QMainWindow 是主窗口类,主窗口类具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口;

QWidget是所有具有可视界面类的基类,选择QWidget创建的界面对各种界面组件都可以支持;

QDialog是对话框类,可建立一个基于对话框的界面。

新建项目:Application->Qt Widgets Application

新建项目里面的文件有哪些:

项目管理文件:.pro  存储项目设置的文件

主程序入口文件: main.cpp 实现main()函数的程序文件

头文件:.h

C++源文件: .cpp

C++里任何窗体或界面组件都是用类封装的,一个类一般有一个头文件和源程序文件

界面文件:.ui 一个XML格式存储的窗体上的元件及其布局的文件

下面分别了解这些文件:

1、首先项目管理文件:文件名就是项目的名称

“QT       += core gui”表示项目中加入core gui模块。

core gui是Qt用于GUI设计的类库模块,如果创建的是控制台Console应用程序,就不需要添加core gui

如果项目中使用到了涉及数据库操作的类就需要用到sql模块,在.pro文件添加这么一句话:

Qt       +=sql

"greaterThan(QT_MAJOR_VERSION, 4): QT += widgets"这是个条件执行语句,表示当Qt主版本大于4时,才加入widgets模块

2、界面文件:双击界面文件(.ui)会出现窗体设计界面

从属性编辑器可以看出类的继承关系:QObject->QWidget->QFrame->Qlabel

组件的字体、对象名称等属性都在右下角属性编辑器里完成

信号和槽可视化关联用最下面的Signals Slots编辑器完成

这样设置表示当按钮btnClose被单击时,执行Widget的close函数,实现关闭窗口的功能

然后对项目进行编译和运行

的确是点击Close就关闭窗口了

3、主函数文件

main()函数时应用程序的入口。它的主要功能时创建应用程序,创建窗口,显示窗口,并运行应用程序,开始应用程序的消息循环和事件处理。

4、窗体相关的文件

4.1 widget.h文件

在创建项目时,选择窗体基类时QWidget,在文件中定义了一个继承自QWidget的类Widget

4.2widget.cpp文件

4.3widget.ui文件

窗体定义界面文件,一个XML文件,定义了窗口上的所有组件的属性设置、布局,及其信号与槽函数的关联等。

4.4ui.widget.h文件

ui.widget.h是在对widget.ui文件编译后生成的一个文件,这个文件会出现在编译后的目录下,不会出现在目录树里

ui_widget.h文件里实现界面功能的类是Ui_Widget。再定义一个类Widget从Ui_Widget继承而来,并定义在namespace Ui里,这样Ui::Widget与widget.h里的类Widget同名,但是用namespace区分开来。所以,界面的Ui::Widget类与文件widget.h里定义的Widget类其实是两个类,但是Qt的处理让用户感觉不到Ui::Widget类的存在,只需要知道在Widget类里用ui指针可以访问可视化界面组件就可以了。

下面再介绍一个例子:

在设计界面组件的时候要设定每个组件独有的objectName

界面组件的层次关系:首先把这些需要的组件拖动到界面内,然后使用容器类Group Box将3个CheckBox放一起,3个Radio Box放一起

布局管理:组件面板有Layouts和Spacers

布局组件

功能

Vertical Layout

垂直方向布局,组件自动在垂直方向上分布

Horizontal Layout

水平方向布局,组件自动在水平方向上分布

Grid Layout

网格状布局,网状布局大小改变时,每个网格的大小都改变

Form Layout

窗体布局,与网格状布局类似,但是只有最右侧的一列网格会改变大小

Horizontal Spacer

一个用于水平分隔的空格

Vertical Spacer

一个用于垂直分隔的空格

使用组件面板里的布局组件设计布局时,先拖放一个布局组件到窗体上,布局组件会以红色边框显示,再往布局里拖放组件。

在设计窗体上方工具栏里各按键:

Edit Widget(F3)

界面设计进入编辑状态,就是正常的设计状态

Edit Signals/Slots(F4)

进入信号与槽的可视化设计状态

Edit Buddies

进入伙伴关系编辑状态,可以设置一个Label与一个组件成为伙伴关系

Edit Tab Order

进入Tab顺序编辑状态,Tab顺序是在键盘上按Tab键时,输入焦点在界面各组件之间跳动的顺序

Lay Out Horizontally(ctrl+H)

将窗体上所选组件水平布局

Lay Out Vertically(ctrl+L)

将窗体上所选组件垂直布局

Lay Out Horizontally in Splitter

将窗体上所选组件用一个分割条进行水平分割布局

Lay Out Vertically in Splitter

将窗体上所选组件用一个分割条进行垂直分割布局

Lay Out in a Form Layout

将窗体上所选组件按窗体布局

Lay Out in a Grid

将窗体上所选组件网格布局

Break Layout

解除窗体上所选组件的布局,也就是打散现有的布局

Adjust Size(ctrl+J)

自动调整所选组件的大小

伙伴关系(Buddy)是指界面上一个Label和一个组件相关联,单击一个Label,按住左键然后拖向一个组件,就建立了伙伴关系。这是为了在程序运行时,在窗体上用快捷键快速将输入焦点切换到某个组件上。

Tab顺序是指在程序运行时,按下键盘上的Tab键时输入焦点的移动顺序。

信号(Signal)就是在特定情况下被发射的事件。

槽(Slot)就是对信号响应的函数。

信号与槽关联:

connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));

(1)一个信号可以连接多个槽

(2)多个信号可以连接同一个槽

(3)一个信号可以连接另外一个信号

(4)信号与槽的参数个数和类型需要一致,至少信号的参数不能少与槽的参数。

(5)在使用信号与槽的类中,必须在类的定义中加入宏Q_OBJECT.

(6)当一个信号被发射时,与其关联的槽函数被立即执行,当所有与信号关联的槽函数被执行完毕后,才会执行发射信号处后面的代码。

可视化生成槽函数原型和框架:

还是上面的例子:

1、字体样式设置

选中chkBoxUnder组件,右键转到槽,选择clicked(bool)

 

OK后在头文件中自动生成如下几行:

在.cpp文件中手动添加几行:

运行一下,几种功能也有效果了:

 

 

 

2、字体颜色设置

在.h文件中定义槽函数,有一种办法可以在.cpp文件中直接自动生成函数框架:

手敲内容:自定义槽函数

因为槽函数是自定义的的,所以不会自动与RadioButton的clicked()事件关联,需要在Dialog构造函数中手工进行关联:

运行展示:

 

3、三个按钮的功能设计

界面上常见的按钮:确定、取消、退出

这次用可视化的方式将信号与槽进行连接,很简单,只需点击上方信号与槽连接按钮,然后点击要匹配的按钮按住左键进行拖拽,出现如下图的对话框,进行点选,如果没有选项,只需把下方的勾打上:

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 可视化Ui设计 的相关文章

  • 纹理openGl。 C++、qt

    我试图用草纹理覆盖我的地形 由高度图制成 但它没有按预期工作 我什至无法在简单的 GL QUAD 上获取纹理 结果是多色网络 void GLWidget initializeGL glEnable GL TEXTURE 2D 在 QGLwi
  • 由于 QCoreApplication 事件循环,QThread 永远不会退出

    Problem 所以我有一个 CommandRetriever 类来保存一些命令 并且should在不同的线程上执行这些命令 class CommandRetriever public CommandRetriever CommandRet
  • Qt3D 是 Qt5 的一部分吗?

    我在windows中安装了Qt5库 但Qt助手中没有关于Qt3D的文档 Qt3D 是 Qt5 的一部分还是已从发布版本 5 中删除 是的 Qt 3D 成为标准 Qt 库Qt 5 7 发布 http blog qt io blog 2016
  • Qt 5.4/Qml:防止绑定循环

    我有一个全局单例 设置 它保存应用程序设置 当我尝试运行以下代码时 我得到一个QML CheckBox Binding loop detected for property checked CheckBox checked Settings
  • 将 Android 应用程序部署到手机:错误:[install_itemfolder_01] 错误 1 ​​Windows

    我已经安装了我可能需要的所有组件 我已经上网两天了 但找不到这个问题的答案 我检查了我的 apache ant javac java JRE JDK Qt 变量一切正常 Qt 喜欢我的所有设置 除了当我尝试将应用程序部署到模拟器或设备时出现
  • App Store 上是否允许嵌入 dylib 的 iOS 8 应用程序?

    iOS 8 现在支持动态框架 是否意味着 App Store 提交允许这样做 似乎以前的开发人员能够在内部应用程序中使用 dylib 但在提交到 App Store 的内容中使用它们会导致您被拒绝 情况仍然如此 还是 iOS 8 中的这一更
  • 如何将父小部件焦点重定向到子小部件?

    有一个简单的类叫做FloatingPointPropertyEditor 它继承的是QWidget并包含一个QLineEdit带有浮点数验证器的实例 class FloatingPointPropertyEditor public QWid
  • 删除行时 QModelIndex 变得无效

    我正在子类化QAbstractItemModel显示项目QTreeView 并且在这个子类中 projectModel 我有一个功能可以删除树视图中当前选定的索引 Component是用于表示模型所有成员的类 void projectMod
  • 无法锚定到不是父级或同级 QML QtQuick 的项目

    我正在使用 QML 开发 python 桌面应用程序 我的 QML 文件中有这个 SplitView anchors fill parent orientation Qt Horizontal Rectangle color 272822
  • QObject:无法为位于不同线程中的父级创建子级

    我在 Windows 7 Ultimate 下使用 Qt 4 6 0 32 位 考虑以下QThread 界面 class ResultThread public QThread Q OBJECT QString post data QNet
  • 无法隐藏 QMenu 对象 QMenu::setVisible()?

    我已经建立了一个QMenu MainMenu在我的上面MainWindow在我的应用程序中 大家都习惯了 我有以下QMenu主菜单 文件 编辑 SuperHeavyExpertMenus 设置 帮助 我想隐藏子树SuperHeaverExp
  • 关于 GUI 计时器显示后台线程已用时间的建议?

    Issue 我有一个 PyQt GUI 用户按下按钮即可启动后台线程 workerThread 它是从QThread 我想要一个计时器显示 以QLabel 显示自此以来已经过去了多少时间workerThread开始 我希望这个计时器在wor
  • Mac OS X 文件关联有效,但文件图标未更改

    我使用 Qt 5 3 2 开发了一个 Mac 应用程序 该应用程序处理具有特定扩展名的文件 比方说 xyz 我创建了一个名为 XYZ icns 的图标文件 并将其添加到我的应用程序包资源文件夹中 MyApp app Contents Res
  • QGroupBox边框

    经过一段时间的搜索后 我发现在组框上设置可见边框的方法是使用 StyleSheet 属性 我补充道 border 2px solid gray 但有几个问题 1 组框内的所有内容也继承此设置 2 边框在标题附近有一个小洞 碎片缺失 Here
  • 删除 QComboBox“下拉”动画

    我正在使用 Qt 4 8 并且想在单击 QComboBox 时摆脱 下拉 动画 我也想稍微移动一下 到目前为止 我一直在考虑重新实现 showPopup 和 hidePopup 但不知道如何使其工作 此外 每次我尝试使用 CSS 进行移动或
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • 通过对 XmlHttpRequest (REST) 的响应在 QML 中显示图像

    我需要从 REST API 调用中获取 jpeg 图像 我使用 XMLHttpRequest 因为请求需要身份验证标头 即我不能只创建一个图像并将源设置为带有 user passwd url 的 URL 我认为我可以通过将 REST 数据设
  • 获取小部件的背景颜色 - 真的

    我无法获取小部件的实际背景颜色 在我的特殊情况下 我在使用 QTabWidget 中的小部件时遇到问题 这是在Windows7上 因此 经典的小部件有一些灰色背景 而选项卡内的小部件通常用白色背景绘制 I tried def bgcolor
  • [本机]:在Qt for Android中使用Java函数和第3方库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近我用qt写了一个android应用程序 但我有一个很大的问题 我可以使用 调用一些原生的android API 比如调用特殊的activit
  • setContextProperty 和对象的 setProperty 之间的区别

    我现在真的很困惑 有什么区别 QQmlApplicationEngine engine engine rootContext setContextProperty myObject userData and object gt setPro

随机推荐

  • web端播放m3u8视频流注意事项

    项目上有一个播放实时视频 直播 的需求 后端童鞋直接传过来一个类似 https live m3u8的视频流地址 让我自行播放 拿到地址的我一脸懵逼 下面开始我的探索 baidu 之路 HLS HTTP Live Streaming 介绍 m
  • Meta发布「分割一切」AI 模型,CV或迎来GPT-3时刻

    demo地址 Segment Anything Meta AI Meta 表示 这是第一个致力于图像分割的基础模型 自此 CV 也走上了 做一个统一某个 某些 全部 任务的全能模型 的道路 在此之前 分割作为计算机视觉的核心任务 已经得到广
  • java属性值注解

    查询条件开始时间 DateTimeFormat pattern yyyy MM dd HH mm ss JsonFormat pattern yyyy MM dd HH mm ss timezone GMT 8 private Date t
  • C# VS2010 Winform 查找链表的近邻值

    实现在类似数组中查找最接近目标值的数值 定义链表 定义链表 private List
  • 架构师进阶之路

    选择的范围太广 可以读的书太多 往往容易无所适从 我想就我自己读过的技术书籍中挑选出来一些 按照学习的先后顺序 推荐给大家 特别是那些想不断提高自己技术水平的Java程序员们 一 Java编程入门类 对于没有Java编程经验的程序员要入门
  • 随机森林建模

    在看datacastle的建模大赛 用r写了随机森林的二分类 上次代码用py跑的 这里想用交叉验证 但是跑了一天一夜也木有出来 还是把代码先保留下来吧 希望看到的人指正 rm list ls setwd D competitions dat
  • Android获取本地相册中图片视频

    权限
  • Linux多进程:exit——进程退出函数

    子进程结束释放自己的用户区数据 内核区数据由其父进程回收释放 pcb fd 等 进程退出函数 void exit int status status 是进程退出时的一个状态信息 父进程在回收子进程资源时可以获取 include
  • 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。

    这个是一个比较坑的题 但也是一个极其能查缺补漏的题 题目描述 求Sn 1 2 3 4 5 n 之值 其中n是一个数字 n不超过20 输入 n 输出 Sn的值 样例输入 5 样例输出 153 在这里插入代码片 乍一看很简单 一下就打好了 但开
  • C++ 结构体转json

    FdogSerialize FdogSerialize是一个用于C 序列化的开源库 采用非入侵方式 无需在原有结构体上进行修改 目前支持基础类型 基础类型数组 结构体 以及vector list map等数据类型的序列化 支持JSON和XM
  • SHA-256算法实现

    SHA 256 算法输入报文的最大长度不超过2 64 bit 输入按512 bit 分组进行处理 产生 的输出是一个256 bit 的报文摘要 该算法处理包括以下几步 STEP1 附加填充比特 对报文进行填充使报文长度与448 模512 同
  • JSR303校验的全局错误处理

    实现一个全局处理类 并对异常进行判断处理 方法有如下几种 1 实现HandlerExceptionResolver接口 实现其中的resolveException 方法 public class GlobalExceptionResolve
  • 自上而下的企业级数据分析应用 更好地满足业务部门需求

    2016年5月26日 由亦策软件和Qlik原厂联合主办的 汽车行业大数据沙龙 在上海巴黎春天新世界酒店召开 与会嘉宾踏着小雨纷至而来 一起围绕着汽车行业目前数据分析的瓶颈 企业发展的局限 以及对未来的构想建设等话题展开了精彩的分享和热切的探
  • ubuntu网卡设置

    UBUNTU网卡配置 主机名修改 hostnamectl set hostname ubuntu1804 cat etc hostname 网卡改名 修改配置文件为下面形式 vi etc default grub GRUB CMDLINE
  • Python面向对象基础练习——设计一个名为 MyRectangle 的矩形类来表示矩形

    设计一个名为 MyRectangle 的矩形类来表示矩形 这个类包含 1 左上角顶点的坐标 x y 2 宽度和高度 width height 3 构造方法 传入 x y width height 如果 x y 不传则默认是 0 如果 wid
  • NFS极品飞车21WIN11闪退解决办法,个人心得

    1 自己遇到的现象 系统升级win11后 之前能运行的NFS21打不开 黑屏后闪退 或者游戏中闪退 重新打开几次都不行 后台直接死 什么垃圾游戏 但是我就要玩 我自己游戏打开时是窗口化的 过10秒左右闪退 进程直接消失 多次打开可能会进 但
  • L2-3 完全二叉树的层序遍历 (25分) 2020 天梯赛

    L2 3 完全二叉树的层序遍历 25分 一个二叉树 如果每一个层的结点数都达到最大值 则这个二叉树就是完美二叉树 对于深度为 D 的 有 N 个结点的二叉树 若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点 这样的树就是完全二叉树
  • Makefile的基本用法

    1 Makefile的基本概念 目标 目标顶格写 后面是冒号 冒号后面是依赖 依赖 依赖是用来产生目标的原材料 命令 命令前面一定是Tab 不能是顶格 也不能说多个空格 命令就是要生成那个目标需要做的动作 2 示例代码 led bin st
  • Node.js 连接 MongoDB

    在 Node js 中连接 MongoDB 数据库需要使用第三方模块 mongodb 首先需要安装 mongodb 模块 你可以使用 npm 命令来安装 npm install mongodb 接着可以使用以下代码来连接 MongoDB 数
  • Qt 可视化Ui设计

    QMainWindow 是主窗口类 主窗口类具有主菜单栏 工具栏和状态栏 类似于一般的应用程序的主窗口 QWidget是所有具有可视界面类的基类 选择QWidget创建的界面对各种界面组件都可以支持 QDialog是对话框类 可建立一个基于