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类,抽象出公共的动作。如在菜单中添加菜单项。

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


综合实例
在窗口上创建一个菜单栏,在菜单栏中添加一些菜单,在某一个菜单中添加一些菜单项
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
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
#include
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;
}

状态栏
- 实时消息:如当前程序的状态
- 永久消息:程序版本号,机构名称
- 进度消息:如进度条提示,百分百提示
状态栏的创建
状态栏的创建是通过QMainWindow类提供的statusBar()函数来创建的

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

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

天正显示的消息的位置

浮动窗口
在Qt中,浮动窗口也称之为铆接部件。浮动窗口通过QDockWIdget类来实现浮动的功能。浮动窗口一般是位于核心部件的周围,可以有多个。
浮动窗口的创建
浮动窗口的创建是通过QDockWidget类提供的构造方法QDockWidget()函数动态创建的

设置停靠的位置
浮动窗口是位于中心部件的周围。可以通过QDockWidget类中踢动setAllowedAreas()函数设置其允许停靠的位置。
对话框
对话框介绍
对话框时GUI程序中一个不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有:QFiledialog(⽂件对话框)、QColorDialog(颜⾊对话框)、QFontDialog(字体对话框)、QInputDialog (输⼊对话框)和 QMessageBox(消息框)
对话框的分类
对话框分为模态对话框和非模态对话框
模态对话框
非模态对话框
混合属性对话框
Qt内置对话框

消息对话框QMessageBox

颜色对话框 QColorDialog

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
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()<

文件对话框 QFileDialog
⽂件对话框⽤于应⽤程序中需要打开⼀个外部⽂件或需要将当前内容存储到指定的外部⽂件。打开⽂件(⼀次只能打开⼀个⽂件):getOpenFileName打开多个⽂件(⼀次可以打开多个⽂件):getOpenFileNames保存⽂件:getSaveFileName
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
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()<

字体对话框QFontDIalog
字体对话框QFontDIalogQt 中提供了预定义的字体对话框类 QFontDialog,⽤于提供选择字体的对话框部件。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
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()<

输入对话框QInputDialog
Qt中提供了预定义的输入对话框类:QInputDialog,用于临时数据输入的场合
1. 双精度浮点型输入数据对话框:getDouble
2. 整型输入数据对话款:getInt
3. 选择条目型输入数据框:getItem
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
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<

浙公网安备 33010602011771号