Day12 qt QMianWindow,资源文件,对话框,布局方式,常用ui控件

QMianWindow

概述

QMainWindow 是一个为用户提供主窗口程序的类,包含一个菜单栏( menu bar )、多
个工具栏 (tool bars) 、多个铆接部件 (dock widgets) 、一个状态栏 (status bar)
一个中心部件 (central widget)
许多应用程序的基础,如文本编辑器,图片编辑器等。

菜单栏

创建菜单栏:
#include <QMenuBar>
QMenuBar --> QMenuBar(QWidget *parent = Q_NULLPTR)
添加菜单栏:
QMainWindow --> void setMenuBar(QMenuBar *menuBar)
创建菜单:
#include <QMenu>
QMenu --> QMenu(const QString &title, QWidget *parent = Q_NULLPTR)
添加菜单:
QMenuBar --> QAction *addMenu(QMenu *menu);
QMenu --> QAction *addMenu(QMenu *menu);
创建菜单项:
#include <QAction>
QAction --> QAction(const QString &text, QObject *parent = nullptr)
添加菜单项:
QMenu --> addAction(const QAction *action)
添加分割线
QMenu->addSeparator()
设置快捷方式
QAction --> setShortcut(tr(" 快捷键 "));
QAction --> setShortcut(QKeySequence( 1+ 2));
:
qa --> setShortcut(tr("ctrl+n"));
qa -> setShortcut(QKeySequence(Qt::CTRL+Qt::Key_N));
QAction 的信号
void changed()
void hovered()
void toggled(bool checked)
void triggered(bool checked = false) 触发【推荐】

工具栏

创建工具栏:
#include <QToolBar>
QToolBar --> QToolBar(QWidget *parent = Q_NULLPTR)
添加工具栏:
QMainWindow -->
        void addToolBar(QToolBar *toolbar)
        void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)
                Qt::LeftToolBarArea 左边显示
                Qt::RightToolBarArea 右边显示
                Qt::TopToolBarArea 上边显示
                Qt::BottomToolBarArea 下边显示
设置位置
setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea
设置可移动性
setMoveable(false) // 工具条不可移动 , 只能停靠在初始化的位置上

状态栏

创建状态栏:
QStatusBar --> QStatusBar(QWidget *parent = Q_NULLPTR);
将控件添加到左边栏
void addWidget(QWidget *widget, int stretch = 0)
将控件添加到右边栏
void addPermanentWidget(QWidget *widget, int stretch = 0)
添加状态栏:
QMainWindow --> void setStatusBar(QStatusBar *statusbar)

铆接部件

创建铆接部件:
QDockWidget -->QDockWidget(const QString &title, QWidget *parent =
Q_NULLPTR)
添加铆接部件:
QMainWindow -->void addDockWidget(Qt::DockWidgetArea area,
QDockWidget* dockwidget)
        Qt::LeftDockWidgetArea 左边
        Qt::RightDockWidgetArea 右边
        Qt::TopDockWidgetArea 上边
        Qt::BottomDockWidgetArea 下边

中心控件

// 创建文本编辑控件
QTextEdit * userName = new QTextEdit(this);
userName->setText(" 文本编辑 ");
// 添加中心控件
setCentralWidget(userName);

资源文件

步骤 1: 创建资源管理文件夹
步骤2:添加前缀
步骤3:添加文件
1, 创建 image 文件夹
2, 将所需图片资源存储到该文件夹中
3, 将该文件夹拷贝到项目下
4, 先点击添加 , 选择添加文件
注意 : 添加完文件或修改别名之后,需要保存( Ctrl+S
别名
【注意】资源有别名后原资源路径无法访问该资源。
使用
QPixmap pix;
pix.load(":/image/up.png");
ui->label->setPixmap(pix);
this->setWindowIcon(QIcon(":/image/Sunny.jpg"));
注意 : 如果资源有别名直接使用 , Sunny.jpg 的别名为 s , 直接使用别名 , 如下
this->setWindowIcon(QIcon(":/s"));

对话框

分类
对话框分为模态对话框和非模态对话框。
模态对话框,就是会阻塞同一应用程序中其它窗口的输入。
是非模态对话框,例如查找对话框,我们可以在显示着查找对话 框的同时,继续对记事本的内进行编辑
使用 QDialog::exec() 实现应用程序级别的模态对话框
使用 QDialog::open() 实现窗口级别的模态对话框
使用 QDialog::show() 实现非模态对话框
头文件
#include<QDialog>
基本对话框
对应类 :QMessageDialog
示例1:
QPushButton * btn01 = new QPushButton ( " 消息对话框 : 提示框 " , this );
connect ( btn01 , QPushButton::clicked ,[ & ](){
QMessageBox::about ( this , " 关于 " , "QT5 之消息对话框 : 提示框 " );
});
示例2:
QPushButton * btn02 = new QPushButton ( " 消息对话框 : 警告框 " , this );
btn02 -> move ( 0 , 50 );
connect ( btn02 , QPushButton::clicked ,[ & ](){
QMessageBox::warning ( this , " 关于 " , "QT5 之消息对话框 : 警告框 " );
});
示例3:
QPushButton * btn03 = new QPushButton ( " 消息对话框 : 错误框 " , this );
btn03 -> move ( 0 , 100 );
connect ( btn03 , QPushButton::clicked ,[ & ](){
QMessageBox::critical ( this , " 关于 " , "QT5 之消息对话框 : 错误框 " );
});
示例4:
QPushButton * btn04 = new QPushButton ( " 消息对话框 : 消息框 " , this );
btn04 -> move ( 0 , 150 );
connect ( btn04 , QPushButton::clicked ,[ & ](){
QMessageBox::information ( this , " 关于 " , "QT5 之消息对话框 : 消息框 " );
});
示例5:
QPushButton * btn05 = new QPushButton ( " 消息对话框 : 选择框 " , this );
btn05 -> move ( 0 , 200 );
connect ( btn05 , QPushButton::clicked ,[ & ](){
QMessageBox::StandardButton sta ;
sta = QMessageBox::question ( this , " 问答 " , " 消息对话框你学会了吗 ?" );
if ( sta == QMessageBox::Yes )
{
        qDebug () << " 学会了 " << endl ;
}
else
{
        qDebug () << " 没学会 " << endl ;
}
});
文件对话框
头文件
#include <QFileDialog>
示例:
QPushButton * btn06 = new QPushButton ( " 文件对话框 " , this );
btn06 -> move ( 0 , 250 );
connect ( btn06 , QPushButton::clicked ,[ & ](){
QString filename = QFileDialog::getOpenFileName ( this , "
" , "D:/" , "*.cpp" );
qDebug () << filename << endl ;
});
颜色对话框
头文件
#include <QColorDialog>
示例:
QPushButton * btn07 = new QPushButton ( " 颜色对话框 " , this );
btn07 -> move ( 0 , 300 );
connect ( btn07 , QPushButton::clicked ,[ & ](){
QColor color = QColorDialog::getColor ( Qt::white , this , " 颜色 " );
qDebug () << color . red () << " " << color . green () << " " << color . blue () << endl ;
});
字体对话框
头文件
#include <QFontDialog>
示例:
QPushButton *btn08 = new QPushButton(" 字体对话框 ",this);
btn08->move(0,350);
connect(btn08, QPushButton::clicked,[&](){
bool yes = true;
QFont font = QFontDialog::getFont(&yes,QFont(" 宋体 "),this," 字体 ");
qDebug() << endl << font.family()<< endl;
qDebug() << font.pointSize() << endl;
});
自定义对话框
创建

使用
1, 导入头文件
2, 使用
QPushButton * btn09 = new QPushButton ( " 自定义对话框 " , this );
btn09 -> move ( 0 , 400 );
connect ( btn09 , QPushButton::clicked ,[ & ](){
MyDialog01 * dialog = new MyDialog01 ( this );
dialog -> setWindowTitle ( " 自定义对话框 " );
// 模态对话框
//dialog->exec();
// 非模态对话框
dialog -> show ();
});

布局方式

概述

Qt 提供了两种组件定位机制:绝对定位和布局定位
1 ) 绝对定位: 是一种最原始的定位方法,给出这个组件的坐标和长宽值。
2 ) 布局定位: 只要把组件放入某一种布局,布局由专门的布局管理器进行管理,当
需要调整大小或者位置的时候, Qt 使用对应的布局管理器进行调整。
Qt 提供的布局中以下三种是我们最常用的:
QHBoxLayout :按照水平方向从左到右布局;
QVBoxLayout :按照竖直方向从上到下布局;
QGridLayout :在一个网格中进行布局,类似于 HTML table
系统提供的布局控件
以上使用不灵活
利用 widget 做布局

常用UI控件

QLabel 标签控件
语法
setText 设置文本
text 获取文本
setPixmap 显示图片
setMovie 显示动画
示例1
// 设置文本
ui->test01->setText(" 德玛西亚 ");
connect(ui->btn01,QPushButton::clicked,[&](){
QString str;
// 获取文本
str = ui->test01->text();
qDebug() << str << endl;
});
示例2
// 设置图片
ui->test01->setPixmap(QPixmap(":/hd"));
ui->test01->setPixmap(QPixmap(":/image/Edit.png"));
示例3
// 设置动画
QMovie *movie = new QMovie(":/image/mario.gif");
ui->test01->setMovie(movie);
// 开始播放
movie->start();
// 停止播放
movie->stop();
QLineEdit 标签控件
语法
QString text() const
void setText(const QString &)
void setEchoMode(EchoMode mode)
QLineEdit::Normal 模式显示方式,按照输入的内容显示。
QLineEdit::NoEcho 不显示任何内容,此模式下无法看到用户的输入。
QLineEdit::Password 密码模式,输入的字符会根据平台转换为特殊字符。
QLineEdit::PasswordEchoOnEdit 编辑时显示字符否则显示字符作为密
void setTextMargins(int left, int top, int right, int bottom)
示例
ui->lineEdit->setText("hello world");
ui->lineEdit->setEchoMode(QLineEdit::Password);
ui->lineEdit->setTextMargins(20,50,20,10);
connect(ui->btn,QPushButton::clicked,[&](){
QString str;
str = ui->lineEdit->text();
qDebug() << str.toUtf8().data() << endl;
});
单选框
示例
代码
// 头文件中声明性别与年龄
private :
Ui::Widget * ui ;
QString sex ;
QString hun ;
// 源文件
connect ( ui -> sexm , QPushButton::clicked ,[ & ](){
sex = ui -> sexm -> text ();
qDebug () << " 性别 :" << sex . toUtf8 (). data () << endl ;
});
connect ( ui -> sexw , QPushButton::clicked ,[ & ](){
sex = ui -> sexw -> text ();
qDebug () << " 性别 :" << sex . toUtf8 (). data () << endl ;
});
connect ( ui -> hun1 , QPushButton::clicked ,[ & ](){
hun = ui -> hun1 -> text ();
qDebug () << " 婚否 :" << hun . toUtf8 (). data () << endl ;
});
connect ( ui -> hun2 , QPushButton::clicked ,[ & ](){
hun = ui -> hun2 -> text ();
qDebug () << " 婚否 :" << hun . toUtf8 (). data () << endl ;
});
多选框
示例
代码
// 头文件
// 存储多选选中内容的容器
QStringList list;
// 源文件,在 UI 文件中点击 CheckBox, 右击转到槽
void Widget::on_checkBox1_stateChanged(int arg1)
{
if(arg1 == 2){
list.append(ui->checkBox1->text());
}
else
{
list.removeOne(ui->checkBox1->text());
}
for(int i = 0; i < list.size(); i++)
{
qDebug() << list.at(i) << endl;
}
}
void Widget::on_checkBox2_stateChanged(int arg1)
{
if(arg1 == 2){
list.append(ui->checkBox2->text());
}
else
{
list.removeOne(ui->checkBox2->text());
}
for(int i = 0; i < list.size(); i++)
{
qDebug() << list.at(i) << endl;
}
}
void Widget::on_checkBox3_stateChanged(int arg1)
{
if(arg1 == 2){
list.append(ui->checkBox3->text());
}
else
{
list.removeOne(ui->checkBox3->text());
}
for(int i = 0; i < list.size(); i++)
{
qDebug() << list.at(i) << endl;
}
}
下拉列表
示例:
代码:
// 设置当前选中的位置
ui->comboBox->setCurrentIndex(2);
// 当选中发送改变时调用
void Widget::on_comboBox_currentIndexChanged(const QString &arg1)
{
qDebug() << arg1 << endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库:外键、唯一键、唯一索引

目录 说明 一、如果要使用外键&#xff0c;表的存储引擎选择哪个&#xff1f; 1.1 答 1.2 示范 1.2.1 主表 &#xff08;1&#xff09;MyISAM的表&#xff1a;masterTable2 &#xff08;2&#xff09;InnoDB的表&#xff1a;masterTable1 1.2.2 从表 &#xff08;1&am…

ZKP15.2 Formal Methods in ZK (Part I)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 15: Secure ZK Circuits via Formal Methods (Guest Lecturer: Yu Feng (UCSB & Veridise)) 15.2 Formal Methods in ZK (Part I) Circuits Workflow Source Code: Witness Generation and ConstraintsWitness Generatio…

微信小程序开发——项目开发入门

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 概述 本文重点介绍微信小程序开发者工具的下载与安装与项目开发入门。 下载开发者工具 请在官方网站下载微信小程序开发工具&#xff1b;图示如下&#xff1a; 请依据实际…

Javaweb之前端工程化的详细解析

3 前端工程化 3.1 前端工程化介绍 我们目前的前端开发中&#xff0c;当我们需要使用一些资源时&#xff0c;例如&#xff1a;vue.js&#xff0c;和axios.js文件&#xff0c;都是直接再工程中导入的&#xff0c;如下图所示&#xff1a; 但是上述开发模式存在如下问题&#xff…

【黑马甄选离线数仓day06_核销主题域开发】

1. 核销主题_DWD和DWM层 1.0 ODS层 操作数据存储层: Operate Data Store 核心理念: 几乎和源数据保持一致,粒度相同 注意事项: 同步方式(全量同步,全量覆盖,增量仅新增,增量新增和更新) 内部表 分区表(部分) 指定字符分隔符 orc zlib 第二天的时候已经完成了从mysql以及sq…

手把手教你:基于python+Django的英文数据分析与可视化系统

系列文章 手把手教你&#xff1a;基于Django的新闻文本分类可视化系统&#xff08;文本分类由bert实现&#xff09;手把手教你&#xff1a;基于python的文本分类&#xff08;sklearn-决策树和随机森林实现&#xff09;手把手教你&#xff1a;基于TensorFlow的语音识别系统 目录…

多线程(补充知识)

STL库&#xff0c;智能指针和线程安全 STL中的容器是否是线程安全的? 不是. 原因是, STL 的设计初衷是将性能挖掘到极致, 而一旦涉及到加锁保证线程安全,会对性能造成巨大的影响. 而且对于不同的容器, 加锁方式的不同, 性能可能也不同(例如hash表的锁表和锁桶). 因此 STL 默认…

jq——实现弹幕滚动(往左滚动+往右滚动)——基础积累

最近同事在写弹幕功能&#xff0c;下面记录以下代码&#xff1a; 1.html代码 <div id"scrollContainer"></div>2.引入jq <script src"./script/jquery-1.8.3.js" type"text/javascript"></script>3.jq代码——往左滚…

conda环境下 ERROR: CMake must be installed to build dlib问题解决

1 问题描述 pip install -r requirements.txt 在构建video_retalking项目过程中&#xff0c;使用命令安装依赖包时&#xff0c;出现如下错误&#xff1a; Building wheels for collected packages: face-alignment, dlib, ffmpy, futureBuilding wheel for face-alignment …

装饰者设计模式

package com.jmj.pattern.decorator;/*** 快餐类(抽象构建角色)*/ public abstract class FastFood {private float price;private String desc;public float getPrice() {return price;}public void setPrice(float price) {this.price price;}public String getDesc() {retu…

如何提高工作效率和决策能力?试试宽屏尺寸的可视化大屏

[作者整理了17份宽屏尺寸的可视化大屏源文件&#xff0c;开箱即用&#xff0c;支持二次开发&#xff01;有需要可私我发你提取码哈~&#xff01;] 随着科技的不断发展&#xff0c;宽屏尺寸的可视化大屏已经成为了商务、政府和企业等领域中不可或缺的一部分。这种大屏幕具有高清…

链接1:编译器驱动程序

文章目录 GNU编译器示例编译 GNU编译器 GNU编译器&#xff08;GNU Compiler&#xff09;是由自由软件基金会&#xff08;Free Software Foundation&#xff0c;FSF&#xff09;开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码&#xff0c;将其转换为…

【LeetCode:1457. 二叉树中的伪回文路径 | 二叉树 + DFS +回文数】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

二十七、RestClient查询文档

目录 一、MatchALL查询 二、Match查询 三、bool查询 四、排序和分页 五、高亮 一、MatchALL查询 Testvoid testMatchAll() throws IOException { // 准备Request对象SearchRequest request new SearchRequest("hotel"); // 准备DSLrequest.source().q…

python+feon有限元分析|求解实例

目录 1、feon框架结构 2. 支持的单元类型 3、实例 1、feon框架结构 包含三个包&#xff1a; sa&#xff1a;结构分析包 ffa&#xff1a;流体分析包 derivation&#xff1a;刚度矩阵包 2. 支持的单元类型 Spring1D11 - 一维弹簧单元 Spring2D11 - 二维弹簧单元 Spring…

go标准库

golang标准库io包 input output io操作是一个很庞大的工程&#xff0c;被封装到了许多包中以供使用 先来讲最基本的io接口 Go语言中最基本的I/O接口是io.Reader和io.Writer。这些接口定义了读取和写入数据的通用方法&#xff0c;为不同类型的数据源和数据目标提供了统一的接…

【JavaEE初阶】——Linux 基本使用和 web 程序部署(下)

文章目录 前言一、Linux 常用命令 1.1 ls 命令 1.2 pwd 命令 1.3 cd 命令 1.4 touch 命令 1.5 cat 命令 1.6 mkdir 命令 1.7 rm 命令 1.8 cp 命令 1.9 mv 命令 1.10 man 命令 1.11 less 命令 1.12 head 命令 1.13 tail 命…

ABAP算法 模拟退火

模拟退火算法 算法原理及概念本文仅结合实现过程做简述 模拟退火算法是一种解决优化问题的算法。通过模拟固体退火过程中的原子热运动来寻找全局最优解。在求解复杂问题时&#xff0c;模拟退火算法可以跳出局部最优解获取全局最优解。 模拟退火算法包含退火过程和Metropolis算法…

八、Lua数组和迭代器

一、Lua数组 数组&#xff0c;就是相同数据类型的元素按一定顺序排列的集合&#xff0c;可以是一维数组和多维数组。 在 Lua 中&#xff0c;数组不是一种特定的数据类型&#xff0c;而是一种用来存储一组值的数据结构。 实际上&#xff0c;Lua 中并没有专门的数组类型&#xf…
最新文章