QT常用控件使用及布局

QT常用控件使用及布局


文章目录

  • QT常用控件使用及布局
  • 1、创建带Ui的工程
  • 2、ui界面介绍
    • 1、界面设计区
    • 2、对象监视区
    • 3、对象监属性编辑区
    • 4、信号与槽
    • 5、布局器
    • 6、控件
      • 1、Layouts
        • 1、布局管理器
        • 2、布局的dome
      • 2、Spacers
      • 3、Buttons
      • 4、项目视图组(Item Views)
      • 5、项目控件组(Item Widgets)
      • 6、Containers(容器)
      • 7、Input widgets
        • 1、QLineEdit 举例
      • 8、Display widgets
        • 1、怎么添加资源文件
        • 2、QLable标签实现标签文本,图片,链接
  • 3、布局练习
  • 4、自定义控件
  • 5、样式表
    • 1、Qt样式表介绍
    • 2、Qt样式表简单举例
  • 6、总结


1、创建带Ui的工程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
项目里会生成带.ui的文件,双击就可以进行ui设计。
在这里插入图片描述

2、ui界面介绍

双击 .ui文件,会弹出UI设计器,其布局大概为:
在这里插入图片描述

1、界面设计区

可以把控件直接拖进来进行布局。

2、对象监视区

所以在界面设计区的控件都能在这看到。

3、对象监属性编辑区

可以对界面设计区选中的控件进行属性设置。比如在界面设计区加入一个按钮。
在这里插入图片描述

4、信号与槽

在这里插入图片描述另外也可以在界面设计区选择按钮,然后右键 - 转到槽…,去添加自定义槽函数。
在这里插入图片描述
在这里插入图片描述
然后在窗口的类声明中的自动生成如下槽函数。然后去实现槽函数即可。这种方式就不需要自己去定义槽函数。
在这里插入图片描述

5、布局器

在这里插入图片描述

6、控件

在这里插入图片描述

1、Layouts

在这里插入图片描述

1、布局管理器

所谓 GUI 界面,归根结底,就是一堆控件的叠加。我们创建一个窗口,把按钮放上面,把图标放上面,这样就成了一个界面。在放置时,控件的位置尤其重要。我们必须要指定控件放在哪里,以便窗口能够按照我们需要的方式进行渲染。这就涉及到控件定位的机制。
在这里插入图片描述
Qt 提供的布局中以下三种是我们最常用的:
QHBoxLayout:按照水平方向从左到右布局;
QVBoxLayout:按照竖直方向从上到下布局;
QGridLayout:在一个网格中进行布局,类似于 HTML 的 table(网格布局可以任意布局)

2、布局的dome
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget)
{ui->setupUi(this);QSpinBox *spinBox = new QSpinBox(this);QSlider *slider = new QSlider(Qt::Horizontal, this);connect(slider, &QSlider::valueChanged,spinBox, &QSpinBox::setValue);void (QSpinBox:: *spinBoxSignal)(int) = &QSpinBox::valueChanged;/* 因为valueChanged信号重载了所以用函数指针来区分调用带参的信号 */connect(spinBox, spinBoxSignal,slider, &QSlider::setValue);spinBox->setValue(35); /* 设置spinBox值 *//* 给控件设置布局 指定布局的父对象(this) 相当把控件放到窗口 */QHBoxLayout *layout = new QHBoxLayout(this);layout->addWidget(spinBox);layout->addWidget(slider);
}

进行水平布局运行如下:
在这里插入图片描述
当窗口的大小改变时,窗口布局里的控件也会自动发生变化。

2、Spacers

在这里插入图片描述

3、Buttons

在这里插入图片描述

4、项目视图组(Item Views)

在这里插入图片描述

5、项目控件组(Item Widgets)

在这里插入图片描述

6、Containers(容器)

在这里插入图片描述

7、Input widgets

在这里插入图片描述

1、QLineEdit 举例
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QLineEdit>
#include <QCompleter>
#include <QStringList>MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget)
{ui->setupUi(this);QLineEdit *edit = new QLineEdit(this);//设置内容edit->setText("12345678");/* 移动行编辑的位置 */edit->move(200,300);//设置内容显示间隙edit->setTextMargins(15, 0, 0, 0);//设置内容显示方式//ui->lineEdit->setEchoMode(QLineEdit::Password);QStringList list;list << "hello" << "How are you" << "hehe";QCompleter *com = new QCompleter(list, this);/* 设置是否区分大小写 */com->setCaseSensitivity(Qt::CaseInsensitive);/* 将QCompleter对象设置到QLineEdit中 */edit->setCompleter(com);
}

按’H’会有提示
在这里插入图片描述

8、Display widgets

在这里插入图片描述

1、怎么添加资源文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在资源里生成image.qrc文件 添加前缀:可以设置前缀 添加文件:可以添加文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
右键—>复制资源路径到剪贴板 。就可以复制选中的资源路径。比如复制如下 //image/LuffyQ.png 根据这路经就可以加载资源。

2、QLable标签实现标签文本,图片,链接
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QLabel>
#include<QMovie> /* 动画头文件 */
#include <QDesktopServices>MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget)
{ui->setupUi(this);/* 1. 设置文本 */QLabel *lable_1 = new QLabel(this);lable_1->move(200,100);lable_1->setText("标签");/* 2. 设置图片 */QLabel *lable_2 = new QLabel(this);lable_2->move(200,200);lable_2->setPixmap(QPixmap("://image/LuffyQ.png"));/* 让图片自适应标签的大小 */lable_2->setScaledContents(true);/* 3. 设置动画 */QLabel *lable_3 = new QLabel(this);lable_3->move(400,200);/* 创建动画 */QMovie *movie = new QMovie("://image/mario.gif"); /* 资源要是动态的图片 *//* movie指定父对象 */movie->setParent(this);/* 标签里设置动画 */lable_3->setMovie(movie);/* 启动动画 */movie->start();/* 让动画自适应标签的大小 */lable_3->setScaledContents(true);/* 4. 显示HTML链接 */QLabel *lable_4 = new QLabel(this);lable_4->move(500,400);lable_4 ->setText("<h1><a href=\"https://www.baidu.com\">百度一下</a></h1>");/* 设置打开外部链接方法1 */lable_4 ->setOpenExternalLinks(true);/* 设置打开外部链接方法2 *///connect(lable_4, &QLabel::linkActivated, this, &MyWidget::slotOpenUrl);
}MyWidget::~MyWidget()
{delete ui;
}void MyWidget::slotOpenUrl(const QString &link)
{QDesktopServices::openUrl(QUrl(link.toLocal8Bit()));
}

3、布局练习

原则:先局部在整体布局。
在这里插入图片描述
总结:布局需要多练习。对象属性里熟悉合理设置。

4、自定义控件

不是在已有的控件拖到界面设计区。
怎么添加类文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
生成Smallwidget.h Smallwidget.cpp
在这里插入图片描述
在Smallwidget.cpp里添加如下代码

#include "smallwidget.h"
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>Smallwidget::Smallwidget(QWidget *parent): QWidget{parent}
{QSpinBox *spin = new QSpinBox(this);QSlider *slider = new QSlider(Qt::Horizontal, this);//把控件添加到布局中QHBoxLayout *hLayout = new QHBoxLayout(this);hLayout->addWidget(spin);hLayout->addWidget(slider);connect(spin, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),slider, &QSlider::setValue);connect(slider,  &QSlider::valueChanged, spin, &QSpinBox::setValue);
}

在界面设计区添加空容器。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终运行如下:
在这里插入图片描述
提升的Smallwidget类在容器里显示出来。

5、样式表

1、Qt样式表介绍

Qt样式表是一个可以自定义部件外观的十分强大的机制﹐控件的都可以使用Qt样式表来美化。Qt样式表的概念,术语和语法都受到了HTML的层叠样式表(Cascading Style Sheets, CSS)的启发,不过与CSS不同的是,Qt样式表应用于部件。
样式表可以使用QApplication: : setStyleSheet()函数将其设置到整个应用程序上,也可以使用QWidget::setStyleSheet()函数将其设置到一个指定的部件(还有它的子部件)上。如果在不同的级别都设置了样式表,那么Qt会使用所有有效的样式表,这被称为样式表的层叠。

2、Qt样式表简单举例

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QLabel>
#include <QPushButton>
MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget)
{ui->setupUi(this);QLabel *pLable = new QLabel(this);QLabel *pLable1 = new QLabel(this);QPushButton *button = new QPushButton(this);pLable->move(100,100);pLable->resize(200,200);pLable1->resize(100,100);button->move(300,300);button->resize(300,300);this->setStyleSheet("QLabel{color:rgb(0, 255, 255);""background-color:red;""}"); /* 设置整个窗口的标签 */pLable->setStyleSheet("QLabel{color:rgb(0, 255, 255);""background-color:blue;""border-image:url(://image/down.png);""}");button->setStyleSheet("QPushButton{""border-image:url(:/image/Sunny.jpg);" /* 填充边框的图像 */"}""QPushButton:hover{""border-image:url(:/image/up.png);" /* 鼠标悬空在按钮的图像 */"}""QPushButton:pressed{""border-image:url(:/image/Luffy.png);" /* 按钮按下图像 */"}");
}

其它QT样式表博客

6、总结

主要介绍QT的UI界面及控件的简单使用与布局。及自定义控件。控件的渲染样式表的简单介绍。

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

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

相关文章

R语言绘制基线资料表

#转换数据类型mydata <- data %>% # 创建新数据集新变量#note#Age=Age, #连续变量#Gender = factor(Gender, levels = c(1, 2),labels = c("Male","Female")) #分类变量transmute(Groups= factor(data$Groups)…

ARM 链接器优化功能介绍

消除公共部分组 链接器可以检测节组的多个副本&#xff0c;并丢弃其他副本。 Arm Compiler for Embedded 生成用于链接的完整对象。因此&#xff1a; 如果 C 和 C 源代码中存在内联函数&#xff0c;则每个对象都包含该对象所需的内联函数的外联副本。如果在 C 源代码中使用…

idea 热更新 JRebel 插件激活使用

下载 在 jetbrains 插件网站点击 show more 加载更多版本找到 2022.4.1 版本https://plugins.jetbrains.com/plugin/4441-jrebel-and-xrebel/versions (opens new window) 安装 请勿直接在idea 中搜索安装, 使用从本地安装, 选择刚刚下载的插件, 激活 在设置中找到 JRebel…

Python count()方法:统计字符串出现的次数与字符串拼接(包含字符串拼接数字)

Python count()方法&#xff1a;统计字符串出现的次数 count 方法用于检索指定字符串在另一字符串中出现的次数&#xff0c;如果检索的字符串不存在&#xff0c;则返回 0&#xff0c;否则返回出现的次数。 count 方法的语法格式如下&#xff1a; str.count(sub[,start[,end]]…

macOS通过外置驱动器备份数据

通过外置驱动器备份数据&#xff08;谨慎操作&#xff09; 1.将外置驱动器连接到您的 Mac。驱动器容量应等于或大于您当前的启动磁盘。驱动器还应该是您可以抹掉的。 2.使用 macOS 恢复功能 抹掉外置驱动器&#xff0c;然后将 macOS 安装 到外置驱动器上。确保您选择的外置驱动…

【无线通信专题】NFC通信模式及可能的应用方式

在文章【无线通信专题】NFC基本原理中我们讲到了NFC工作模式。其中NFC工作模式主要有三种,读写模式、卡模拟模式、点对点模式。 NFC通信模式丰富,NFC Forum定义了三种NFC设备:通用NFCForum设备、读写器设备和标签设备。这些NFC设备可以在三种通信模式下运行,并对应用案例进…

如何使用Plex在Windows系统搭建个人媒体站点公网可访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频&#xff0c;已经算是生活中稀松平常的场景了&#xff0c;特别是各…

定量评估batch correction质量的方法:混合分数

[41] Bttner, M. et al. A test metric for assessing single-cell RNA-seq batch correction. Nat. Methods 16, 43–49 (2019). 被引次数&#xff1a;297 方法介绍与应用来自论文&#xff1a;Matthew Amodio, David Van Dijk, Krishnan Srinivasan, William S Chen, Hussei…

UE4.27.2 网页串流

1、和Unity串流一样安装Node.js 下载地址https://nodejs.org/ 2、下载安装Epic Games启动程序https://www.unrealengine.com/zh-CN/download 3、安装UE4.7.2 4、这里就不安装像素流送演示&#xff0c;选个别的然后创建工程 5、启用PixelStreaming插件 6、设置额外启动参数&am…

【前端规范】

1 前言 HTML 作为描述网页结构的超文本标记语言&#xff0c;一直有着广泛的应用。本文档的目标是使 HTML 代码风格保持一致&#xff0c;容易被理解和被维护。 2 代码风格 2.1 缩进与换行 [强制] 使用 4 个空格做为一个缩进层级&#xff0c;不允许使用 2 个空格 或 tab 字符…

【ZooKeeper高手实战】ZAB协议:ZooKeeper分布式一致性的基石

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

1、从https://github.com/homuler/MediaPipeUnityPlugin 下载Release Package 目前是MediaPipeUnity.0.12.0.unitypackage 2、导入Unity工程 3、打开Face Detection场景&#xff0c;做一些设置修改 1、打开Bootstrap&#xff0c;图像源改成Video&#xff0c;把Solution拖拽到…

day10 用栈实现队列 用队列实现栈

题目1&#xff1a;232 用栈实现队列 题目链接&#xff1a;232 用栈实现队列 题意 用两个栈实现先入先出队列&#xff08;一个入栈&#xff0c;一个出栈&#xff09;&#xff0c;实现如下功能&#xff1a; 1&#xff09;push&#xff1a;将元素x推到队列末尾 2&#xff09;…

基于SpringBoot的医院挂号就诊系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的医院挂号就诊系统,java…

1.7 day5 IO进程线程

互斥锁 #include <myhead.h> char buf[128];//创建临界资源 pthread_mutex_t mutex;//创建锁 void *task(void *arg)//分支线程 {while(1){pthread_mutex_lock(&mutex);//上锁printf("分支线程:buf%s\n",buf);strcpy(buf,"I Love China");pthre…

OpenMMlab导出PointPillars模型并用onnxruntime推理

导出onnx文件 通过mmdeploy的tool/deploy.py脚本容易转换得到PointPillars的end2end.onnx模型。 根据https://github.com/open-mmlab/mmdeploy/blob/main/docs/zh_cn/04-supported-codebases/mmdet3d.md显示&#xff0c;截止目前 mmdet3d 的 voxelize 预处理和后处理未转成 o…

WorkPlus完备的企业级功能堆栈,打造高效的企业移动平台

在如今的数字化时代&#xff0c;企业需要一个完备的功能堆栈来满足复杂的业务需求。WorkPlus作为一个完整的企业级移动平台&#xff0c;拥有完备的企业级功能&#xff0c;如IM、通讯录、内部群、模板群、工作台、权限管控、应用中心、日程管理、邮箱、同事圈、服务号、智能表单…

ROS学习笔记(9)进一步深入了解ROS第三步

0.前提 1. (C)Why did you include the header file of the message file instead of the message file itself?&#xff08;为包含消息的头文件而不是消息本身&#xff1f;&#xff09; 回答&#xff1a;msg文件是描述ROS消息字段的文本文件&#xff0c;用于生成不同语言消息…

银行十大主题域

当事人、产品、协议、事件、资产、财务、机构、地域、营销、渠道 便于记忆&#xff1a; 银行是一个企业&#xff0c;同时也是一个机构&#xff0c;涉及企业机构就会有资产&#xff0c;财务的存在&#xff0c;银行有自己的产品&#xff08;信用卡&#xff0c;黄金&#xff0c;期…

SpringCloud中网关拿到的路径(使用nacos做配置中心)

配置中心 - id: systemuri: lb://systempredicates:- Path=/system/**filters: - StripPrefix=1这里会消去system这一层的请求 网关代码 import org.springframework.cloud.gateway.filter.GatewayFilterChain; import