Qt学习之Qt基础入门(中)

article/2025/10/25 1:04:15

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=


http://chatgpt.dhexx.cn/article/6kfl50t5.shtml

相关文章

Qt学习之Qt基础入门(上)

1. 前言 上一篇博客&#xff0c;简单的介绍了一下C的面向对象编程&#xff0c;这篇博客就主要是用来入门Qt&#xff0c;废话不多说&#xff0c;开干&#xff01; Qt入门系列&#xff1a; Qt学习之C基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) Qt学习…

qt基础入门教程

1、t的介绍、优点、成功案例 5.8.0 Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。爸是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组件编程。 推荐安装 wps linux 桌面环境 虚拟机软件 屏幕共…

Qt入门教程100篇(已完结)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「CSDN学院」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;Qt基础教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&…

QT入门看这一篇就够了——超详细讲解(40000多字详细讲解,涵盖qt大量知识)

目录 一、Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt的优势 1.4 Qt版本 1.5 成功案例 二、创建Qt项目 2.1 使用向导创建 2.2 一个最简单的Qt应用程序 2.2.1 main函数中 2.2.2 类头文件 2.3 .pro文件 2.4 命名规范 2.5 QtCreator常用快捷键 三、Qt按钮小程序 …

QT入门到实战学习笔记

学习笔记 最新QT从入门到实战完整版|传智教育_哔哩哔哩_bilibili 目录 1.创建一个QT文件 1.1命名规范 1.2快捷键 2QPushButton创建 2.1防止汉语乱码 2.2对象树 2.3Qt窗口坐标体系 3信号和槽机制 3.1自定义信号和槽 3.1.1自定义信号&#xff1a; 3.1.2自定义槽&#…

pdflatex和xelatex的使用差别和建议

关于pdflatex和xelatex的区别的一些注意点 pdflatex 和xelatex分别是什么我遇到的一些问题 pdflatex 和xelatex分别是什么 pdflatex 和xelatex是latex编译中最常用的编译方式&#xff0c;而且效果一般都是比较好的。 PDFLaTeX命令&#xff1a;PDFTeX程序中的命令&#xff0c;用…

关于MAC解决jupyter中出现nbconvert failed/ xelatex not found on path报错

前言 开开心心的花了半个小时做完了2303的期中测试&#xff0c;结果在导出为pdf的时候提示我500错误&#xff0c;说明为nbconvert failed: xelatex not found on path&#xff0c;我当时就蒙了昂&#xff0c;不过还好考试时间是三个小时&#xff0c;还能浪浪&#xff0c;但是我…

【LaTex使用总结】LaTex,pdflatex,xelatex,xetex等的区别和关系

问题是这样产生的&#xff0c;从本科毕设开始接触LaTex起&#xff0c;使用现成的模板进行编译生成操作&#xff0c;一步步按指示操作也从未深究。 后来使用word较多&#xff0c;LaTex经常是简单模板&#xff0c;也渐渐对LaTex的细节不再感兴趣&#xff0c;近期又开始用LaTex撰写…

pyplot 使用 latex 报错:xelatex not found……

错误提示 发生异常: RuntimeError xelatex not found. Install it or change rcParams[pgf.texsystem] to an available TeX implementation. 原始参数&#xff1a; plt.rcParams.update({"pgf.texsystem": "xelatex","text.usetex": True,# u…

Winedt为什么可以用pdfLaTex编译中文(pdfLaTex和XeLaTex的使用)

文章目录 Winedt为什么可以用pdfLaTex编译中文查看Winedt的默认编译器&#xff1a; 1.XeLaTex和pdfLaTex的关系2.Winedt中使用pdfLaTex编译中文的tex3.原因4.验证 Winedt为什么可以用pdfLaTex编译中文 前言&#xff1a;如果你只是想用Winedt实现LaTex中英混排那么可以直接选择…

recipe terminated with fatal error: spawn xelatex enoent.

vscode配置latex的小问题 问题产生的原因是环境变量没有配置好。所以只需要把环境变量配置好就可以了。 1、 打开textlive安装的路径&#xff08;…\textlive\2022\bin\win32&#xff09;&#xff0c;比如我的就是C:\texlive\2022\bin\win32 2、编辑环境变量&#xff1a; 编…

TeXstudio报错: fwrite: Broken pipe xelatex.exe

错误&#xff1a; 解决方法&#xff1a; 选项->设置TeXstudio 默认编译器换成PdfLaTex&#xff1a; 问题解决。

CTEX编译Xelatex以及如何更新Miktex

1.现在很多科研人员都喜欢用latex来写文章&#xff0c;主要是latex有了模板之后排版较简单&#xff0c;而且参考文献比较容易生成&#xff0c;不需要再去排版。本人自己比较喜欢使用CTEX&#xff0c;这个得看个人习惯使用吧。有很多同胞在使用CTEX 时可能会遇到无法编译Xelatex…

linux下latex使用教程,LaTeX使用--XeLaTeX入门基础(二)

主机平台&#xff1a;Gentoo Linux 11.2 内核版本&#xff1a;Linux Kernel 3.2.1 编译环境&#xff1a;XeTeX 3.1415926-2.3-0.9997.5 (TeX Live 2011) 相关阅读 主机平台&#xff1a;Gentoo Linux 11.2 内核版本&#xff1a;Linux Kernel 3.2.1 编译环境&#xff1a;XeTeX 3.…

TeXworks 设置成默认用XeLaTeX排版

TeXworks 设置成默认用XeLaTeX排版 在用Texlive2020中,自身自带的编辑器每次都是默认以pdfLaTeX的方式进行排版 因为pdfLaTex在排版中文的时候容易乱码和报错, 用XeLaTeX排版就不会,为了方便就将它设置为一打开编辑器就是以XeLaTeX 方式排版 一打开就是这样子 首先在编辑器页面…

解决XeLaTex编译后中文出现乱码的问题

最近想用LaTex做简历&#xff0c;但是在做中文简历的时候&#xff0c;出现乱码的情况&#xff0c;网上查了很多解决方法&#xff0c;最后成功解决了&#xff0c;在这里总结分享一下。 先建立一个tex文件&#xff0c;输入一下格式的文件&#xff0c;注意加入\usepackage{CTEX} …

Latex、XeLatex无法加粗

XeLaTeX是新的Unicode版本&#xff0c;内建支持Unicode(UTF-8)&#xff0c;可以调用操作系统的字体。但是在使用的时候也可能会出现许多问题&#xff0c;例如我最近使用的时候字体就一直无法显示粗体&#xff0c;但是运行的时候不报错。 原因有可能是你的系统里面缺少模板指定…

配置中文XeLaTex环境

本人初始时懒人一键使用了CTex安装&#xff0c;但无奈写中文论文时版本太低不支持使用的模板&#xff0c;所以开始自行配置TexLiveWinEdtSumatraPDF的环境。【TeXworks个人觉得真的不太好用 其中使用TexLive时遇到的一些问题及解决方案如下&#xff1a; fontspec.cfg: Erroneo…

VSCode Latex Workshop 设置 XeLatex 编译

前言 VSCode LatexWorkshop 是非常方便的组合&#xff0c;而对于中文文档&#xff0c;pdfLatex 引擎的支持很差&#xff0c;很多时候需要使用 XeLatex 引擎编译&#xff0c;但是总是莫名其妙各种报错。用下面的 magic 语句也无济于事。 % !TEX program xelatex 本篇介绍通…

overleaf 改为XeLatex怎么操作

文章目录 overleaf 改为XeLatex怎么操作 overleaf 改为XeLatex怎么操作 想将overleaf中的编译器改为XeLatex&#xff0c;搜索后也没有发现太好的回答&#xff0c;解决方法如下 点击菜单选项&#xff0c;然后就可以对overleaf进行设置了 效果如下&#xff1a;