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基础入门(中)相关推荐

  1. Qt学习之Qt基础入门(下)

    1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...

  2. 阿里云天池学习赛-零基础入门数据分析-学术前沿趋势分析(task1)

    阿里云天池学习赛零基础入门数据分析-学术前沿趋势分析 前言 一.赛题描述及数据说明 1:数据集的格式如下: 2:数据集格式举例: 二.task1论文数量统计(数据统计任务):统计2019年全年,计算机 ...

  3. 视频教程-人人都会深度学习之Tensorflow基础入门-深度学习

    人人都会深度学习之Tensorflow基础入门 大数据工程师/算法工程师/大数据讲师,毕业于西华大学软件工程专业.在大数据领域有着丰富的实战经验. 擅长领域:Spark/Hadoop.算法设计及系统架 ...

  4. 1、Latex学习笔记之基础入门篇

    目录 一.Latex基础 1.架构 2.引用.脚注 3.单栏.双栏 4.常用快捷键 5.宏包 6.空格 7.换行.行间距 8.换段 9.下划线 10.引号 11.注释 12.字体 13.缩进 14.超 ...

  5. Spark大数据开发学习:Spark基础入门

    在诸多的大数据技术框架当中,Spark可以说是占据了非常重要的地位,继Hadoop之后,基于实时数据处理需求的不断上升,Spark开始占据越来越大的市场份额,而Spark,也成为大数据的必学知识点.今 ...

  6. 【Qt Quick】零基础入门系列之安装与卸载(一)

    [Qt Quick]概述 |本文大概阅读时间8分钟. |版权说明:原创文章,如需转载,请标明文章出处.https://blog.csdn.net/weixin_40192195/article/det ...

  7. Qt 学习(三) —— Qt 模块

    1. Qt 模块简介 Qt由许多模块组成,分别支持不同领域的功能,主要分为 Essentials 和 Add-On. Qt Essential 是基本模块,它们可以在所有受支持的开发平台和经过测试的目 ...

  8. MySQL数据库 学习笔记 零基础入门 面试 整理

    一.MySQL基础篇 1. 数据库技术的基本概念和方法 1.1 数据库基本概念 1] 数据 数据(Data)指对客观事物进行描述并可以鉴别的符号,这些符号是可识别的.抽象的,不仅仅指狭义上的数字,而是 ...

  9. 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. ...

最新文章

  1. easyui英文提示变中文
  2. 如何判断Unix系统的一个库文件是32位还是64位的
  3. vscode 网页版
  4. debug模式不报错,release模式报错
  5. Oracle根底数据标准存储名目浅析(三)——日期标准(三)
  6. 一行shell解决Mac文件乱码问题
  7. 计算机二级c语言编程题库100题下载,计算机二级C语言编程题库100题.doc
  8. php生成成语,洪恩在线成语词典小偷程序php版_PHP教程
  9. 酷派7269_酷派7269(联通版)救砖教程 线刷教程 图文详解 附线刷工具下载
  10. 前端开发:颜色代码速查表【英文颜色、HEX格式、RGB格式】
  11. 计算机学院研发------考核之界面
  12. 计算机 无法自检,电脑开机无法完成自检的原因分析
  13. 微信小程序之自定义计时器
  14. linux之OPERATION(运维)一
  15. 微服务架构通讯模式架构分析
  16. pytorch笔记(一)——tensor的storage()、stride()、storage_offset()
  17. Java 快速深度克隆对象 [Faster Deep Copies of Java Objects]
  18. 菲涅耳衍射,夫琅禾费衍射
  19. linux安装各种系统插件
  20. C++黑客攻击系统-功能菜单

热门文章

  1. 循环小数与费马小定理
  2. HDOJ1496 Equations【Hash】
  3. python中的装饰器
  4. [坐标]关于坐标系和投影的相关知识探讨[转]
  5. [Winodows图形编程]初识双缓冲技术
  6. IBM云计算带我们进入新服务经济时代
  7. 除了架构,没有数据人才,也做不了数字化转型,传统企业路在何方
  8. 《飞鸽传书》把写程序和文学创作相提并论
  9. H618B刷了tomato0530版本 呵呵,测试一下
  10. 需要符合互联网时代需求的《飞秋》