Qt学习之Qt基础入门(中)
1. 前言
上一篇博客,总结了Qt的一些基础用法,这篇博客继续跟视频学习Qt的常用方法
Qt入门系列:
Qt学习之C++基础
Qt学习之Qt安装
Qt学习之Qt基础入门(上)
Qt学习之Qt基础入门(中)
Qt学习之Qt基础入门(下)
本文原创,创作不易,转载请注明!!!
本文链接
个人博客: https://ronglin.fun/archives/220
PDF链接:见博客网站
CSDN: https://blog.csdn.net/RongLin02/article/details/120661304**
2. QMainWindow
QMainWindow作为一个主窗口,有很多方便的控件可以用
2.1. 菜单栏
菜单栏最多只有一个
QMenuBar * bar = MenuBar();
this->setMenuBar( bar )
QMenu * fileMenu = bar -> addMenu(“文件”) 创建菜单
QAction * newAction = fileMenu ->addAction(“新建”); 创建菜单项
//添加分割线
fileMenu->addSeparator();
2.2. 工具栏
可以有多个
QToolBar * toolbar = new QToolBar(this);
addToolBar( 默认停靠区域, toolbar ); //例如:Qt::LeftToolBarArea
可以设置后期停靠区域,设置浮动,设置移动,添加菜单项 或者添加 小控件等等
2.3. 状态栏
最多一个
QStatusBar * stBar = statusBar();
setStatusBar(stBar); //设置到窗口中
stBar->addWidget(label); //放左侧信息
stBar->addPermanentWidget(label2); //放右侧信息
2.4. 铆接部件
浮动窗口 可以多个
QDockWidget
addDockWidget( 默认停靠区域,浮动窗口指针)
设置后期停靠区域
2.5. 设置核心部件
只能一个
this->setCentralWidget(edit);
以上这些在ui中均已经创建完毕,如果想要灵活使用,可以查询API
3. 资源文件
首先要将图片文件拷贝到项目位置下,我这里在项目根目录创建一个image文件夹,里边放入了一张图片
然后在开发工具中,右键项目->添加新文件 –> Qt
- >Qt recourse File
然后起名字,叫res,然后路径也选择项目根目录
然后它会生成一个res.qrc的资源文件
然后对着res.qrc
右键 -> open in editor
-> 编辑资源
在右侧,添加前缀 我这里前缀起名/
前缀添加完毕后,再点击 添加文件,然后选择要添加的图片等资源文件,可以多选,然后再 右键项目 -> 重新构建
之后如果工程中出现图片,则说明导入完成
资源文件导入完毕,使用的时候可以这样使用“ : + 前缀名 + 文件名 ”
例如
this->setWindowIcon(QIcon(":/image/test.png"));
这样就能在项目中使用导入的资源了,例如这个方法就是设置程序的图标
4. 对话框
对话框是一个特别常见的界面,比如当用户退出程序的时候,会弹出来一个对话框询问是否要退出等等,下面介绍常用的对话框。
4.1. 分类
常见对话框一共用两种分类,一个是模态对话框,一个是非模态对话框,模态对话框弹出时,只能对本对话框操作,不能对其他窗口操作,而模态对话框可以对其他窗口操作
4.1.1. 模态对话框
不可以对其他窗口进行操作,其他窗口为阻塞状态
代码见下注释区,效果如图
.1.2. 非模态对话框
可以对其他窗口进行操作
代码见下,效果如图
4.1.2. 实例代码
注意非模态对话框,为了防止一闪而过,要创建到堆区
同时如果实现上图的效果,要在ui中拖动一个pushButton
到主界面中
然后用connect函数实现这个按钮的功能,用Lambda表达式快速实现
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QDialog>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,[=](){
// QDialog dlg(this);
// dlg.setWindowTitle("模态对话框");
// dlg.resize(300,100);
// dlg.show();QDialog* dlg = new QDialog(this);dlg->setWindowTitle("非模态对话框");dlg->resize(300,100);dlg->show();});
}
MainWindow::~MainWindow()
{delete ui;
}
4.2. 标准对话框
4.2.1. 总述
所谓标准对话框,是 Qt 内置的一系列对话框,用于简化开发。事实上,有很多对话框都是通用的,比如打开文件、设置颜色、打印设置等。这些对话框在所有程序中几乎相同,因此没有必要在每一个程序中都自己实现这么一个对话框。
Qt 的内置对话框大致分为以下几类:
QColorDialog: 选择颜色;
QFileDialog: 选择文件或者目录;
QFontDialog: 选择字体;
QInputDialog: 允许用户输入一个值,并将其值返回;
QMessageBox: 模态对话框,用于显示信息、询问问题等;
QPageSetupDialog: 为打印机提供纸张相关的选项;
QPrintDialog: 打印机配置;
QPrintPreviewDialog:打印预览;
QProgressDialog: 显示操作过程。
4.2.2. 消息对话框
模态对话框,消息对话框的创建,要用QMessageBox的静态成员函数,在API中可以看到,一共有4种消息对话框,这四种对话框的返回值是StandardButton类型,可以利用返回值判断用户点击了哪个按钮
4.2.2.1. 错误对话框
效果如左上
//函数
StandardButton critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)//用法
QMessageBox::critical(this,"错误对话框","这是一个critical对话框");
4.2.2.2. 信息对话框
效果如右上
//函数
StandardButton information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)//用法
QMessageBox::information(this,"信息对话框","这是一个information对话框")
可以看到,在构造函数中,还有两个参数,一个是StandardButtons,就是信息对话框里边ok的那个,还有参数一个是defaultButton,是默认光标所在的按钮。
4.2.2.3. 提问对话框
效果如左下
StandardButton question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)//用法
QMessageBox::question(this,"提问对话框","这是一个question对话框");
第四个参数有些特别,用到了 | 符号,实际可以这样用QMessageBox::Save|QMessageBox::Close
表示同时显示两个按钮,一个是保存,一个是关闭,这两个在QMessageBox中都有定义
4.2.2.4. 警告对话框
效果如右下
StandardButton warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)//用法
QMessageBox::warning(this,"警告对话框","这是一个warning对话框");
5. 界面布局
界面布局主要就是在ui设置,尤其是在可视化界面中拖动图标设置。
利用布局方式 给窗口进行美化
5.1. 布局方法
比如,我们在界面中,选中两个按钮,(摁住Ctrl键,再点击另一个控件可实现多选),然后点击上方的垂直布局,然后就发现两个按钮上下排列,并且1:1对齐了
一共有多种对齐方式:水平布局、垂直布局、栅格布局
如果设置的布局不喜欢,可以右键->打破布局
如果默认窗口和控件之间 有间隙,可以调整在右下角的layoutLeftMargin
属性
同时也可以利用弹簧进行布局,在Spacers
,下有垂直弹簧和水平弹簧,可以自动填充
5.2. 按比例布局
有的时候,一个布局中存在多个控件,我们希望组件按照一定的比例排布而不是默认,这样的话,我们在布局 完成后,在右侧点击QVBoxLayout
类,然后在右侧下方,有一个layoutStretch
属性,里边有几个值,如果这个布局中有3个控件就有3个值,如果是有四个控件就有4个值,按照下图为例,我有三个控件,一个是QFrame
一个QListView
,一个是pushButton
,我想让他们按照3:5:1的比例排布,就设置3,5,1,效果如图。
这个功能特别好用,尤其是在界面可变大小的程序中,当用户拉伸界面的时候,我们希望我们的程序内部的控件仍然按照比例缩放,这时候就可用这个方法设置了。
6. 控件
控件有太多了,在ui界面中已经显示了很多,如果不太清楚它的用法,去查询API也能大概搞懂,这里只是大概过一下。
6.1. 按钮组
QPushButton是一个常用按钮
QToolButton是一个工具按钮 用于显示图片,如图想显示文字,修改风格:toolButtonStyle , 凸起风格autoRaise
radioButton是一个单选按钮,设置默认ui->radioButton->setChecked(true);
checkbox多选按钮,监听状态,2 选中 1 半选 0 未选中
关于后两个按钮多说一嘴,因为选项都是一组的,尤其是在radioButton中,我们希望一组选项中只有一个选中,那么就可以把备选选项都拖入一个GroupBox
中,然后这样就会默认一个GroupBox
中是同一组,同一组中的选项就只能选择一个了。如下图:
6.2. QListWidget 列表容器
QListWidgetItem * item //显示一行内容
ui->listWidget ->addItem ( item )
item->setTextAlignment(Qt::AlignHCenter); //设置居中方式
可以利用addItems
一次性添加整个诗内容,用法如下
//利用listWidget写诗
// QListWidgetItem * item = new QListWidgetItem("锄禾日当午");
// //将一行诗放入到listWidget控件中
// ui->listWidget->addItem(item);
// item->setTextAlignment(Qt::AlignHCenter);//QStringList QList<QString>QStringList list ;list << "锄禾日当午" << "旱地和下土" << "谁知盘中餐"<< "粒粒皆辛苦";ui->listWidget->addItems(list);
6.3. QTreeWidget 树控件
要先设置头,然后创建一个根节点,添加根节点 到 树控件上,之后再往根节点上添加子节点
用法如下:
//treeWidget树控件使用//设置水平头ui->treeWidget->setHeaderLabels(QStringList()<< "英雄"<< "英雄介绍");QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<< "力量");QTreeWidgetItem * minItem = new QTreeWidgetItem(QStringList()<< "敏捷");QTreeWidgetItem * zhiItem = new QTreeWidgetItem(QStringList()<< "智力");//加载顶层的节点ui->treeWidget->addTopLevelItem(liItem);ui->treeWidget->addTopLevelItem(minItem);ui->treeWidget->addTopLevelItem(zhiItem);//追加子节点QStringList heroL1;heroL1 << "刚被猪" << "前排坦克,能在吸收伤害的同时造成可观的范围输出";QTreeWidgetItem * l1 = new QTreeWidgetItem(heroL1);liItem->addChild(l1);
6.4. QTableWidget 表格控件
要设置列数,设置水平表头,设置行数,同时设置正文
//TableWidget控件//设置列数ui->tableWidget->setColumnCount(3);//设置水平表头ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<< "性别"<< "年龄");//设置行数ui->tableWidget->setRowCount(5);//设置正文//ui->tableWidget->setItem(0,0, new QTableWidgetItem("亚瑟"));QStringList nameList;nameList<< "亚瑟"<< "赵云"<< "张飞"<< "关羽" << "花木兰";QList<QString> sexList;sexList << "男"<< "男"<< "男"<< "男"<< "女";for(int i = 0 ; i < 5 ;i ++){int col = 0;ui->tableWidget->setItem(i,col++, new QTableWidgetItem(nameList[i]));ui->tableWidget->setItem(i,col++, new QTableWidgetItem(sexList.at(i)));//int 转 QStringui->tableWidget->setItem(i,col++, new QTableWidgetItem( QString::number(i+18)));}
6.5. 其他控件介绍
stackedWidget 栈控件
ui->stackedWidget->setCurrentIndex(1);
下拉框
ui->comboBox->addItem("奔驰");
QLabel 显示图片
ui->lbl_Image->setPixmap(QPixmap(":/Image/butterfly.png"))
QLabel显示动图 gif图片
ui->lbl_movie->setMovie(movie);
movie->start();
以上控件用法见下:
//栈控件使用//设置默认定位 scrollAreaui->stackedWidget->setCurrentIndex(1);//scrollArea按钮connect(ui->btn_scrollArea,&QPushButton::clicked,[=](){ui->stackedWidget->setCurrentIndex(1);});//toolBox按钮connect(ui->btn_ToolBox,&QPushButton::clicked,[=](){ui->stackedWidget->setCurrentIndex(2);});//TabWidget按钮connect(ui->btn_TabWidget,&QPushButton::clicked,[=](){ui->stackedWidget->setCurrentIndex(0);});//下拉框ui->comboBox->addItem("奔驰");ui->comboBox->addItem("宝马");ui->comboBox->addItem("拖拉机");//点击按钮 选中拖拉机选项connect(ui->btn_select,&QPushButton::clicked,[=](){//ui->comboBox->setCurrentIndex(2);ui->comboBox->setCurrentText("拖拉机");});//利用QLabel显示图片ui->lbl_Image->setPixmap(QPixmap(":/Image/butterfly.png"));//利用QLabel显示 gif动态图片QMovie * movie = new QMovie(":/Image/mario.gif");ui->lbl_movie->setMovie(movie);//播放动图movie->start();
7. 总结
这篇博客主要总结ui界面的设计,其实在API中都有教程,这里只是过一下。
未完待续,=w=
Qt学习之Qt基础入门(中)相关推荐
- Qt学习之Qt基础入门(下)
1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...
- 阿里云天池学习赛-零基础入门数据分析-学术前沿趋势分析(task1)
阿里云天池学习赛零基础入门数据分析-学术前沿趋势分析 前言 一.赛题描述及数据说明 1:数据集的格式如下: 2:数据集格式举例: 二.task1论文数量统计(数据统计任务):统计2019年全年,计算机 ...
- 视频教程-人人都会深度学习之Tensorflow基础入门-深度学习
人人都会深度学习之Tensorflow基础入门 大数据工程师/算法工程师/大数据讲师,毕业于西华大学软件工程专业.在大数据领域有着丰富的实战经验. 擅长领域:Spark/Hadoop.算法设计及系统架 ...
- 1、Latex学习笔记之基础入门篇
目录 一.Latex基础 1.架构 2.引用.脚注 3.单栏.双栏 4.常用快捷键 5.宏包 6.空格 7.换行.行间距 8.换段 9.下划线 10.引号 11.注释 12.字体 13.缩进 14.超 ...
- Spark大数据开发学习:Spark基础入门
在诸多的大数据技术框架当中,Spark可以说是占据了非常重要的地位,继Hadoop之后,基于实时数据处理需求的不断上升,Spark开始占据越来越大的市场份额,而Spark,也成为大数据的必学知识点.今 ...
- 【Qt Quick】零基础入门系列之安装与卸载(一)
[Qt Quick]概述 |本文大概阅读时间8分钟. |版权说明:原创文章,如需转载,请标明文章出处.https://blog.csdn.net/weixin_40192195/article/det ...
- Qt 学习(三) —— Qt 模块
1. Qt 模块简介 Qt由许多模块组成,分别支持不同领域的功能,主要分为 Essentials 和 Add-On. Qt Essential 是基本模块,它们可以在所有受支持的开发平台和经过测试的目 ...
- MySQL数据库 学习笔记 零基础入门 面试 整理
一.MySQL基础篇 1. 数据库技术的基本概念和方法 1.1 数据库基本概念 1] 数据 数据(Data)指对客观事物进行描述并可以鉴别的符号,这些符号是可识别的.抽象的,不仅仅指狭义上的数字,而是 ...
- C++后续:QT学习(Qt概述,创建QT项目)
目录 声明 一. Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt支持的平台 1.4 Qt版本 1.5 Qt的下载与安装 1.6 Qt的优点 二.创建 Qt项目 2.1 如何创建 2. ...
最新文章
- easyui英文提示变中文
- 如何判断Unix系统的一个库文件是32位还是64位的
- vscode 网页版
- debug模式不报错,release模式报错
- Oracle根底数据标准存储名目浅析(三)——日期标准(三)
- 一行shell解决Mac文件乱码问题
- 计算机二级c语言编程题库100题下载,计算机二级C语言编程题库100题.doc
- php生成成语,洪恩在线成语词典小偷程序php版_PHP教程
- 酷派7269_酷派7269(联通版)救砖教程 线刷教程 图文详解 附线刷工具下载
- 前端开发:颜色代码速查表【英文颜色、HEX格式、RGB格式】
- 计算机学院研发------考核之界面
- 计算机 无法自检,电脑开机无法完成自检的原因分析
- 微信小程序之自定义计时器
- linux之OPERATION(运维)一
- 微服务架构通讯模式架构分析
- pytorch笔记(一)——tensor的storage()、stride()、storage_offset()
- Java 快速深度克隆对象 [Faster Deep Copies of Java Objects]
- 菲涅耳衍射,夫琅禾费衍射
- linux安装各种系统插件
- C++黑客攻击系统-功能菜单