当前位置: 首页 > news >正文

Qt窗口与对话框开发指南

Qt窗口是通过QMainWindow类来实现的。

QMainWindow是一个为用户提供主窗口程序的类,继承子QWidget类,并且提供了一个预定义布局。QMainWindow 包含 ⼀个菜单栏(menu bar)、多个⼯具栏(tool bars)、多个浮动窗⼝(铆 接部件)(dock widgets)、⼀个状态栏(status bar) 和⼀个 中⼼部件(central widget),它是许多应⽤程序的基础,如⽂本编辑器,图⽚编辑器等。如下图为 QMainwindow 中 各组件所处的位置

菜单栏

Qt中的菜单栏是通过QMenuBar这个类来实现的。一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。

创建菜单栏

方式一:菜单栏的创建可以借用QMainWindow类提供的menuBar()函数来实现。

方式二:在堆上动态创建

使用setMenubar吧菜单放到窗口中

在菜单栏中添加菜单

创建菜单,并通过QMenu提供的addMenu()函数来添加菜单。

创建菜单项

在Qt中,并没有专门的菜单项类,可以通过QAction类,抽象出公共的动作。如在菜单中添加菜单项。

QAction 可以给菜单栏使⽤, 也可以给⼯具栏使⽤

在菜单项之间添加分割线

在菜单项之间可以添加分割线。添加分割线是通过QMenu类提供的addSeparator()函数实现的

综合实例

在窗口上创建一个菜单栏,在菜单栏中添加一些菜单,在某一个菜单中添加一些菜单项

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextEdit>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置标题this->setWindowTitle("我的记事本");// 创建菜单栏QMenuBar* menubar = new QMenuBar(this);this->setMenuBar(menubar);// 创建菜单QMenu* menu = new QMenu("文件");menubar->addMenu(menu);// 创建菜单项QAction* action1 = new QAction("保存");QAction* action2 = new QAction("加载");menu->addAction(action1);menu->addAction(action2);connect(action1,&QAction::triggered,this,&MainWindow::save);connect(action2,&QAction::triggered,this,&MainWindow::load);// 创建中央控件QTextEdit* edit = new QTextEdit(this);this->setCentralWidget(edit);edit->setPlaceholderText("请在此处输入内容");}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::save()
{// 进行某些操作
}void MainWindow::load()
{// 进行某些操作
}

工具栏

⼯具栏是应⽤程序中集成各种功能实现快捷键使⽤的⼀个区域。可以有多个,也可以没有,它并不是应⽤程序中必须存在的组件。它是⼀个可移动的组件,它的元素可以是各种窗⼝组件,它的元素通常以图标按钮的⽅式存在。如下图为⼯具栏的⽰意图:

创建工具栏

调佣QMainWindow类的addToolBar()函数来创建工具栏,每增加一个工具栏都需要调用一次函数

如添加两个工具栏

设置停靠位置

工具栏停靠位置的设置有两种方式。一种是在创建工具栏的同时指定停靠的位置,另一种是通过QToolBar类提供的setAllowAreas()函数来设置

方式一:创建工具栏的同时指定其停靠的位置

在创建工具栏的同时,也可以设置工具栏的位置,其默认的位置是在窗口的最上面

方式二:使用QToolBar类提供的setAllowedAreas()函数设置停靠位置

设置浮动属性

工具栏的浮动属性可以通过QToolBar类提供的setFloatable()函数来设置、setFloatable()函数原型为:

void setFloatable(bool floatable)

参数:

true 浮动

false 不浮动

设置移动属性

设置好工具栏的移动属性可以通过QToolBar类提供的setMovable()函数来设置。setMovable()函数原型为

void setMovable(bool movable)

参数:

true 移动

false 不移动

如果设置工具栏位不移动的状态,则设置其停靠位置的操作就不会生效,所有设置工具栏的移动属性类似于总开关的效果。

综合实例

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QToolBar>
#include <QPushButton>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置窗口的大小resize(800,600);QToolBar* toolbar = new QToolBar(this);// 设置工具栏的位置,默认是在窗口上方,此处设置为左侧addToolBar(Qt::LeftToolBarArea,toolbar);// 设置工具栏只允许停靠在左侧或者右侧toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);// // 设置浮动属性toolbar->setFloatable(false);// // 设置移动属性toolbar->setMovable(true);// 设置工具栏的内容QAction* action1 = new QAction("open",this);QAction* action2 = new QAction("new",this);toolbar->addAction(action1);toolbar->addSeparator();toolbar->addAction(action2);QPushButton* btn = new QPushButton("请点击我",this);toolbar->addWidget(btn);
}MainWindow::~MainWindow()
{delete ui;
}

状态栏

状态栏是应⽤程序中输出简要信息的区域。⼀般位于主窗⼝的最底部,⼀个窗⼝中最多只能有⼀个状态栏。在 Qt 中,状态栏是通过 QStatusBar类 来实现的。 在状态栏中可以显⽰的消息类型
  • 实时消息:如当前程序的状态
  • 永久消息:程序版本号,机构名称
  • 进度消息:如进度条提示,百分百提示

状态栏的创建

状态栏的创建是通过QMainWindow类提供的statusBar()函数来创建的

在状态栏中显示实时消息

在状态栏中显示实时消息时通过showMessage()函数来实现的

在状态栏中显示永久消息

在状态栏中可以显示永久消息,此处的永久消息时通过标签来显示的

天正显示的消息的位置

浮动窗口

在Qt中,浮动窗口也称之为铆接部件。浮动窗口通过QDockWIdget类来实现浮动的功能。浮动窗口一般是位于核心部件的周围,可以有多个。

浮动窗口的创建

浮动窗口的创建是通过QDockWidget类提供的构造方法QDockWidget()函数动态创建的

设置停靠的位置

浮动窗口是位于中心部件的周围。可以通过QDockWidget类中踢动setAllowedAreas()函数设置其允许停靠的位置。

对话框

对话框介绍

对话框时GUI程序中一个不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有:QFiledialog(⽂件对话框)、QColorDialog(颜⾊对话框)、QFontDialog(字体对话框)、QInputDialog (输⼊对话框)和 QMessageBox(消息框)

对话框的分类

对话框分为模态对话框和非模态对话框

模态对话框
模态对话框指的是:显⽰后⽆法与⽗窗⼝进⾏交互,是⼀种阻塞式的对话框。使⽤ QDialog::exec() 函数调⽤。
模态对话框适⽤于必须依赖⽤⼾选择的场合,⽐如消息显⽰,⽂件选择,打印设置等。
非模态对话框
⾮模态对话框显⽰后独⽴存在,可以同时与⽗窗⼝进⾏交互,是⼀种⾮阻塞式对话框,使⽤
QDialog::show()函数调⽤。
⾮模态对话框⼀般在堆上创建,这是因为如果创建在栈上时,弹出的⾮模态对话框就会⼀闪⽽过。同时还需要设置 Qt:WA_DeleteOnClose 属性,⽬的是:当创建多个⾮模态对话框时(如打开了多个⾮模态窗⼝),为了避免内存泄漏要设置此属性
⾮模态对话框适⽤于特殊功能设置的场合,⽐如查找操作,属性设置等

混合属性对话框
混合属性对话框同时具有模态对话框和⾮模态对话框的属性,对话框的⽣成和销毁具有⾮模态对话框属性,功能上具有模态对话框的属性
使⽤ QDialog::setModal() 函数 可以创建混合特性的对话框。通常,创建对话框时需要指定对话框的⽗组件。

Qt内置对话框

Qt提供了多种可复用的对话框类型,即Qt标准对话框。Qt标准对话框全部继承与QDialog类。常用的标准对话框
消息对话框QMessageBox
消息对话框时应用程序中最常见的界面元素。消息对话框最要用于为用户提供重要信息,强制用户进行选择操作。
颜色对话框 QColorDialog
颜⾊对话框的功能是允许⽤⼾选择颜⾊。继承⾃ QDialog 类。颜⾊对话框如下图⽰:
1、 QColorDialog (QWidget *parent = nullptr) //创建对象的同时设置⽗对象
2、 QColorDialog(const QColor &initial, QWidget *parent = nullptr) //创建对象的同时通过QColor
对象设置默认颜⾊和⽗对象
3、 void setCurrentColor(const QColor &color) //设置当前颜⾊对话框
4、 QColor currentColor() const //获取当前颜⾊对话框
5、 QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString
&title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()) //打开颜⾊
选择对话框,并返回⼀个QColor对象
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QPushButton>
#include <QColorDialog>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);resize(800,600);QPushButton* colorButton = new QPushButton("选择颜色",this);// 创建颜色对话框QColorDialog* colorDialog = new QColorDialog(this);connect(colorButton,&QPushButton::clicked,this,[=](){QColor color = colorDialog->getColor(QColor(255,0,0));qDebug()<<color.red();qDebug()<<color.green();qDebug()<<color.blue();});
}MainWindow::~MainWindow()
{delete ui;
}

文件对话框 QFileDialog
⽂件对话框⽤于应⽤程序中需要打开⼀个外部⽂件或需要将当前内容存储到指定的外部⽂件。
打开⽂件(⼀次只能打开⼀个⽂件):getOpenFileName
打开多个⽂件(⼀次可以打开多个⽂件):getOpenFileNames
保存⽂件:getSaveFileName
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QPushButton>
#include <QFileDialog>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QPushButton* btn = new QPushButton("文件",this);connect(btn,&QPushButton::clicked,this,[=](){QString path =QFileDialog::getOpenFileName(this,"文件","F:/封面","*.jpg");qDebug()<<path;});
}MainWindow::~MainWindow()
{delete ui;
}

字体对话框QFontDIalog
Qt 中提供了预定义的字体对话框类 QFontDialog,⽤于提供选择字体的对话框部件。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QPushButton>
#include <QFontDialog>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QPushButton* btn = new QPushButton("文字",this);connect(btn,&QPushButton::clicked,this,[=](){bool flag;QFont font = QFontDialog::getFont(&flag,QFont("华文行楷",36));qDebug()<<font.family();qDebug()<<font.pointSize();qDebug()<<font.bold();qDebug()<<font.italic();});
}MainWindow::~MainWindow()
{delete ui;
}

输入对话框QInputDialog

Qt中提供了预定义的输入对话框类:QInputDialog,用于临时数据输入的场合

1. 双精度浮点型输入数据对话框:getDouble

2. 整型输入数据对话款:getInt

3. 选择条目型输入数据框:getItem

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QPushButton>
#include <QInputDialog>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QPushButton* btn = new QPushButton("输入框",this);connect(btn,&QPushButton::clicked,this,[=](){QStringList items;items<<tr("spring")<<tr("summer")<<tr("Fall")<<tr("winter");QString item = QInputDialog::getItem(this,"输入框","item",items);qDebug()<<item;});
}MainWindow::~MainWindow()
{delete ui;
}

http://www.dtcms.com/a/414878.html

相关文章:

  • 湖北平台网站建设哪家好有经验的邵阳网站建设
  • 33.Linux iCSCI 服务
  • 国内优秀网页设计网站网站建设流程共有几个阶段
  • 基于物联网的个人健康管理系统(论文+源码)
  • 一个网站可以做几个关键词网站建设济南
  • Linux日志分析入门:使用grep和awk发现服务器异常访问
  • 435. 无重叠区间
  • 2025制造业研发流程提效指南:从审批卡顿到协同闭环,3类系统选型全解析
  • 文件夹随机分配 把文件夹随机分配到指定的文件夹中
  • 104.二叉树的最大深度(二叉树算法题)
  • 宿迁做网站的怎样制作h5
  • 电子商务网站建设结业论文seo教程seo官网优化详细方法
  • 使用 Three.js 和本地 Draco Loader 高效加载压缩 GLB 模型
  • Nginx-Proxy-Manager配置SSL泛域名证书教程
  • 图的遍历:从深度优先到广度优先
  • Java数据结构:ArrayList与顺序表1
  • C语言实战项目:贪吃蛇(1)
  • 鸿蒙应用开发之ArkTs集成AI大模型与Markdown流式渲染教程(API 20)
  • 网站建设服务器环境配置关于网站开发的网店计划书范文
  • LeetCode-hot100——将有序数组转换为二叉搜索树
  • 网站速度对seo的影响修改wordpress登录背景图片
  • Kimi 灰度测试 OK Computer,AI 从 “问答” 迈入 “执行” 新阶段​
  • 什么是 mmap?
  • 民宿客用网络升级方案:从传统到现代化的跃迁
  • 湖南省住房和城乡建设厅老网站做网站分为竞价和优化
  • 品牌创意网站建设韩国手机网站模板
  • 力扣3679. 使库存平衡的最少丢弃次数
  • LeetCode:75.前K个高频元素
  • MySQL 基础指令全解析:从入门到熟练操作
  • 南华 NHZ-03/10/13 型滚筒反力式制动检验台:传统制动检测的核心设备