四、基本组件

1. Designer设计师

Designer程序是Qt官方推出的专为设计人员使用的UI设计工具,程序员可以使用此工具大幅降低UI设计的代码量。
Designer设计文件的格式是.ui,需要配合同名的头文件与源文件使用。.ui文件通常被称为界面文件,其内部是xml语法的代码。
当新建项目时,选中image.png

选项,此时的项目就会自带dialog.ui文件。

在这里插入图片描述

双击界面文件,可以直接使用QtCreator内置的Designer程序打开此文件。
image.png

2. 布局 Layout

可以把布局看做是一个透明的箱子,在布局中的组件会自动按照布局的规则排布,布局包括:
image.png

垂直/水平布局表示内部所有组件呈垂直/水平线性排布;格栅布局内部的组件会排布成m*n的格式;表单布局主要用于信息的输入。
image.png
取消布局可以使用image.png

布局常用属性如下:
image.png
布局支持嵌套,对于嵌套的内层布局而言,相当于外层布局的一个组件。
image.png
布局可以贴合窗口,需要选中出窗口后,点击一下布局的工具栏,此时布局可贴合窗口。
有时候需要在组件之间填充空白,除了可以使用一些布局或组件的属性外,还可以使用伸展器(QSpacer)组件,此组件专用于填充空白,本身运行不可见。
image.pngimage.png

3. ui指针

当项目中使用了界面文件后,可以在C++代码中随处可见ui指针成员,可以把此指针看做是界面文件在C++代码中的对象。
image.png
image.png

4. 基本组件

4.1 QWidget类

QWidget类是所有组件的基类,本次再来认识一些此类的属性。
image.png

4.2 QLabel 标签

QLabel是一个标签组件,用于显示文字或图片。
常用属性如下:

image.png
添加图片到项目中,操作步骤如下:

  1. 找到图片资源,格式要求为jpg、png、bmp,不要选择过大的图片(分辨率、文件大小)。
    iconfont-阿里巴巴矢量图标库
    素材网站
  2. 更改图片名称,名称建议为全英文、下划线和数字组合,且英文全小写,数字不能开头。
  3. 把图片放置到工作目录中。
  4. 在Qt Creator中选中项目名称,鼠标右键,点击“添加新文件”。
  5. 按照下图所示进行操作。
    image.png
  6. 在弹出的窗口中设置资源文件名称。
    在这里插入图片描述
  7. 在项目管理界面,直接点击完成。可以看到项目中多了一个.qrc的资源文件。
    image.png
  8. 选中qrc文件,点击添加前缀。image.png
  9. 再次点击添加里面的添加文件image.png,在弹出的对话框窗口中选中要添加的图片文件。添加成功后会在qrc文件中显示出来。
    在这里插入图片描述
  10. 点击image.png让资源文件可以被Designer找到,随后就可以在Designer中设置图片了。
    Qt可以完成一些简单的图像处理,但是建议在Qt使用图片之前预先处理好图片,提升程序的运行效率。

4.3 QAbstractButton 按钮类

QAbstractButton是所有按钮类的抽象基类。
image.png
QAbstractButton常用属性如下:
image.png
按钮类常用信号:
image.png
多个按钮组件的信号槽可以使用QButtonGroup进行分组后连接。

// 构造函数
// 需要手动管理堆内存对象
QButtonGroup::QButtonGroup(QObject * parent = 0)
// 添加按钮到按钮组
// 参数1:按钮对象
// 参数2:编号
void QButtonGroup::addButton(QAbstractButton * button, 
int id = -1)

image.png 这些信号对应了单个按钮的四种触发情况,参数1用于判断哪个按钮被触发。
需要注意的是,QButtonGroup会导致QCheckBox变单选,此时需要手动关闭互斥性。

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QDebug>
#include <QButtonGroup> // 按钮组namespace Ui {
class Dialog;
}class Dialog : public QDialog
{Q_OBJECTpublic:explicit Dialog(QWidget *parent = 0);~Dialog();private:Ui::Dialog *ui;QButtonGroup* group;private slots:// 与void	toggled(bool checked)连接// 表示选中状态改变void toggledSlot(bool);// 与按钮组信号连接void btnToggledSlot(int,bool);
};#endif // DIALOG_H
#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);connect(ui->radioButtonBurger,SIGNAL(toggled(bool)),this,SLOT(toggledSlot(bool)));// 创建按钮组对象group = new QButtonGroup(this);// 添加按钮对象group->addButton(ui->checkBoxTea,1);group->addButton(ui->checkBoxCoffee,2);group->addButton(ui->checkBoxDrink,3);// 手动关闭互斥group->setExclusive(false);connect(group,SIGNAL(buttonToggled(int,bool)),this,SLOT(btnToggledSlot(int,bool)));
}void Dialog::toggledSlot(bool checked)
{if(checked)qDebug() << "吃汉堡";elseqDebug() << "不吃汉堡";
}void Dialog::btnToggledSlot(int id, bool checked)
{if(id == 1)if(checked)qDebug() << "喝茶";elseqDebug() << "不喝茶";else if(id == 2)if(checked)qDebug() << "喝咖啡";elseqDebug() << "不喝咖啡";else if(id == 3)if(checked)qDebug() << "喝咖啡";elseqDebug() << "不喝咖啡";
}Dialog::~Dialog()
{delete ui;
}

4.4 QLineEdit 单行文本编辑框

用于输入一个单行字符串,常用属性如下:
image.png
常用信号函数如下:
image.png

4.5 QComboBox 组合框

就是一个下拉菜单,功能类似于QRadioButton。
常用属性如下:
image.png
常用信号如下:
image.png
image.png

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QDebug>namespace Ui {
class Dialog;
}class Dialog : public QDialog
{Q_OBJECTpublic:explicit Dialog(QWidget *parent = 0);~Dialog();private:Ui::Dialog *ui;private slots:// 高光信号槽void highlightedSlot(QString);
};#endif // DIALOG_H
#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);connect(ui->comboBox,SIGNAL(highlighted(QString)),this,SLOT(highlightedSlot(QString)));
}Dialog::~Dialog()
{delete ui;
}void Dialog::highlightedSlot(QString text)
{qDebug() << text;
}

4.6一组与数字相关的组件

在这里插入图片描述

常用属性如下:
image.png
部分组件拥有方向属性orientation

常用信号:

// value属性值改变时发射
// 参数是当前的value值
void	valueChanged(int value)

通过QDial控制其他控件

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>namespace Ui {
class Dialog;
}class Dialog : public QDialog
{Q_OBJECTpublic:explicit Dialog(QWidget *parent = 0);~Dialog();private:Ui::Dialog *ui;private slots:// 与void valueChanged(int value)信号连接void valueChangedSlot(int);
};#endif // DIALOG_H
#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);connect(ui->dial,SIGNAL(valueChanged(int)),this,SLOT(valueChangedSlot(int)));
}Dialog::~Dialog()
{delete ui;
}void Dialog::valueChangedSlot(int value)
{ui->spinBox->setValue(value);ui->progressBar->setValue(value);ui->horizontalScrollBar->setValue(value);ui->verticalScrollBar->setValue(value);ui->horizontalSlider->setValue(value);ui->verticalSlider->setValue(value);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/113733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微机原理:汇编语言语句类型与格式

文章目录 壹、语句类型1、语句分类2、常用伪代码和运算符2.1数据定义伪指令2.1.1字节定义伪指令DB&#xff08;8位&#xff09;2.1.2字定义伪指令DW&#xff08;16位&#xff09;2.1.3双字节伪指令DD2.1.4 多字节定义DF/DQ/DT&#xff08;了解&#xff09; 2.2 常用运算符2.2.1…

【数据库】SQL 过滤数据

过滤数据 简单过滤where 子句操作符检查单个值范围值检擦空值检查 高级过滤多个过滤条件求值顺序IN 操作符NOT 操作符 在 s q l sql sql 语句中&#xff0c;通过 WHERE 子句指定搜索条件进行过滤。 简单过滤 包含&#xff1a;WHERE&#xff0c;BETWEEN&#xff0c;IS NULL&a…

面向对象与面向过程讲解

目录 简介 面向过程编程&#xff08;Procedural Programming&#xff09; 什么是面向过程编程&#xff1f; 特点&#xff1a; 面向对象编程&#xff08;Object-Oriented Programming&#xff09; 什么是面向对象编程&#xff1f; 特点&#xff1a; 面向对象 vs. 面向过程…

学习人工智能

在线课程 优达学城 当斯坦福大学讲师 Sebastian Thrun 和 Peter Norvig 将他们的课程“人工智能概论”免费放到网上时&#xff0c;Udacity 开始了在线学习的实验。从那时起&#xff0c;它就受到了巨大的欢迎&#xff08;来自 190 多个国家的 160,000 名学生&#xff09;&#x…

[java进阶]——异常详解,try catch捕获异常,抛出异常

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、异常的体系结构 二、处理异常的本质 三、异常处理的三种方式 3.1虚拟机jvm处理(默认) 3.2 try catch捕获异常 3.3抛出异常 3.4finally关键字 四、自定义异常 五、总结 一、异常的体系结构 分析&#…

【uniapp】proxy 代理切换至线上测试地址调试接口

本地测试地址形如&#xff1a;http://192.168.124.x:xxxx 线上测试地址形如&#xff1a;https://xxxx.xxxx.com 使用线上地址之后需要修改配置项 secure 为 true const constant require(./src/utils/constant) module.exports {devServer: {proxy: {/api: {target: constan…

Node-EventEmitter的用法

题记 EventEmitter的用法&#xff0c;以下是详细过程和代码。 Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。 Node.js 里面的许多对象都会分发事件&#xff1a;一个 net.Server 对象会在每次有新连接时触发一个事件&#xff0c; 一个 fs.readStream 对象会…

[python-大语言模型]从浅到深一系列学习笔记记录

整体学习路径参照&#xff1a;点这里 python-机器学习-深度学习-大语言模型-数据开发 面向开发者的LLM入门提示原则 面向开发者的LLM入门 学习链接&#xff1a; github地址&#xff1a;https://github.com/datawhalechina/prompt-engineering-for-developers 在线阅读地址&…

【LeetCode】145. 二叉树的后序遍历 [ 左子树 右子树 根结点]

题目链接 文章目录 Python3方法一&#xff1a; 递归 ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯方法二&#xff1a; 迭代 ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯方法三&#xff1a; Morris ⟮ O ( n ) 、 O ( 1 ) ⟯ \lgroup O(n)、O(1) \rgroup ⟮O(n)、O(1)⟯写…

MySQL表操作—存储

建表&#xff1a; mysql> create table sch( -> id int primary key, -> name varchar(50) not null, -> glass varchar(50) not null -> ); Query OK, 0 rows affected (0.01 sec) 插入数据&#xff1a; mysql> insert into sch (id,name,…

c语言练习94:分割链表

分割链表 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,4,3,2,5,2], x…

短视频矩阵系统源码(搭建)

短视频矩阵源码的开发路径分享如下&#xff1a; 1、首先&#xff0c;确定项目需求和功能&#xff0c;包括用户上传、编辑、播放等。 2、其次&#xff0c;搭建开发环境&#xff0c;选择合适的开发工具和框架。 3、然后&#xff0c;进行项目架构设计和数据库设计&#xff0c;确…

PHPExcel 字母列不够用,针对 AA、AB、AC ... ZZ 这样的列

在PHPExcel 导出功能中&#xff0c;如果字段超过26个字母时&#xff0c;会出现字母不够用A~Z后 AA~AZ来添加后续字段 php中&#xff0c;chr() 函数从指定 ASCII 值返回字符&#xff0c;可以自定义一个方法来返回对应的字母 // $num 列数 1,2,3,4,5,6,7...... function getCol…

弹出框,使用树结构查询数据

效果如下: 描述:希望点击某个按钮,弹出一个窗口,然后通过下拉框,点击下拉框里面的组织信息,然后查询对应组织的成员对象列表,并展示到表格中 HTML代码(最主要的就是树的那个): <el-dialog :visible.sync="TesteePage.showDialog" width="70%&quo…

Spring 解决获取请求参数的乱码问题

解决获取请求参数的乱码问题 解决获取请求参数的乱码问题&#xff0c;可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter&#xff0c;但是必须在web.xml中进行注册 <!--配置springMVC的编码过滤器--> <filter><filter-name>CharacterEncodingFilt…

git远端协同开发、解决冲突、分支合并、gitlab使用、远程仓库回滚、为开源项目贡献代码、git工作流,git pull和git fetch,变基

协同开发 避免冲突 张三&#xff1a;改了 settings.py 第一行&#xff0c;提交了 李四&#xff1a;改了 settings.py 第二行&#xff0c;提交了 你也在改setting.py ,没有拉取代码&#xff0c;不知道他们提交了&#xff0c;动了第二行&#xff0c;但是跟李四代码不一样 你要…

【CGSSA-BP预测】基于混合混沌-高斯变异-麻雀算法优化BP神经网络回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

GenericWriteAheadSink每次checkpoint后事务是否必须成功

背景 GenericWriteAheadSink原理是把接收记录按照检查点进行分段&#xff0c;每个到来的记录都放到对应的分段中&#xff0c;这些分段内的记录是作为算子状态的形式存储和故障恢复的&#xff0c;对于每个分段内的记录列表&#xff0c;flink会在收到检查点完成的通知时把他们都…

用Wokwi仿真ESP-IDF项目

陈拓 2023/10/21-2023/10/21 1. 概述 Wokwi是一个在线的电子电路仿真器。你可以使用它来仿真Arduino、ESP32、STM32和许多其他流行的电路板、元器件以及传感器&#xff0c;免去使用开发板。 Wokwi提供基于浏览器的界面&#xff0c;您可以通过这种简单直观的方式快速开发一个…

java的for循环中遇到异常抛出后继续循环执行

java的for循环中遇到异常抛出后继续循环执行 Test public void loopTryCatchTest() throws Exception {Map<String, Object> a new HashMap();a.put("a", "1");a.put("b", null);a.put("c", "3");for (Map.Entry<…