#include "mainwindow.h"
#include<QPushButton>
#include<QDebug>
#include<QMenuBar>
#include<QMenu>
#include<QAction>
#include<QToolBar>
#include<QStatusBar>
#include<QLabel>
#include<QTextEdit>
#include<QDockWidget>
#include<QDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//菜单栏
QMenuBar *mBar = menuBar();
//添加菜单
QMenu *pFile = mBar->addMenu("文件");
//添加菜单项,添加动作
QAction * pNew = pFile->addAction("新建");
connect(pNew,&QAction::triggered,
[=]()
{
qDebug()<<"新建";
}
);
pFile->addSeparator();
QAction *pOpen = pFile->addAction("打开");
//工具栏 菜单栏的快捷方式
QToolBar * toolBar = addToolBar("toolBar");
//工具栏添加快捷键
toolBar->addAction(pNew);
QPushButton *a = new QPushButton(this);
a->setText("^_^");
toolBar->addWidget(a);
connect(a,&QPushButton::clicked,
[=]()
{
a->setText("123");
}
);
//状态栏
QStatusBar * sBar = statusBar();
QLabel *label = new QLabel(this);
label->setText("Normal text file");
sBar->addWidget(label);
//addWidget从左往右添加
sBar->addWidget(new QLabel("11",this));
//从右往左添加
sBar->addPermanentWidget(new QLabel("22",this));
//核心控件
QTextEdit * textEdit = new QTextEdit(this);
setCentralWidget(textEdit);
//浮动窗口
QDockWidget *dock = new QDockWidget(this);
//给浮动窗口加控件
addDockWidget(Qt::RightDockWidgetArea,dock);
QTextEdit * textEdit2 = new QTextEdit(this);
dock->setWidget(textEdit2);
//添加模态对话框
QMenu * pDlg = mBar->addMenu("对话框");
QAction * p = pDlg->addAction("模态对话框");
connect(p,&QAction::triggered,
[=]()
{
QDialog a;
a.exec();
}
);
QAction * q= pDlg->addAction("非模态对话框");
connect(q,&QAction::triggered,
[=]()
{
QDialog *a = new QDialog(this);
a->show();
/*
不指定父对象
QDialog *dlg1 = new QDialog;
dlg1->setAttribute(Qt::WA_DeleteOnClose);//关闭对话框后释放内存
dlg1->show();
*/
}
);
resize(400,300);
}
MainWindow::~MainWindow()
{
}
1.首先需建立一个菜单栏
所谓菜单栏,就是放文件 编辑 构建...这些选项的地方
实现:
需要使用到的头文件
#include<QMenuBar>
源代码
QMenuBar * mBar = menuBar();
在QWidget类中有一个menuBar()的函数,这个函数的解释如下
大体意思就是返回返回一个空的菜单栏的指针,并将这个空的菜单栏显示在主窗口上
2.创建一个菜单按钮
菜单按钮是什么呢?就是下图中这些文件 编辑 构建这些按钮
需要的头文件
#include<QMenu>
源代码
QMenu * pFile = mBar->addMenu("文件")
这样是创建一个名为“文件”的菜单按钮,并返回一个指向该菜单按钮的指针
运行结果
3.创建菜单选项
菜单选项就是点击菜单按钮后,下拉出来的选项,如
这些就是很多个菜单选项
需要的头文件
#include<QAction>
QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中。
源代码
QAction *pNew = pFile->addAction("新建");
pFile->addSeparator();
QAction *pNew = pFile->addAction("打开");
pFile->addSeparator()是用来分隔新建和打开两个菜单选项,效果如下
运行结果
4.点击新建后可打印“新建”
需要用到的模块
CONFIG +=C++11
需要的头文件
#include<QDebug>
源代码
connect(pNew,&QAction::triggered,
[]()
{
qDebug()<<"新建";
//qDebug()相当于cout
}
);
运行结果
点击新建后输出“新建”
5.添加一个工具栏,并添加一个新建的快捷按钮以及自定义的按钮
需要的头文件
#include<QToolBar>
#include<QPushBotton>
源代码
//工具栏 菜单栏的快捷方式
QToolBar * toolBar = addToolBar("toolBar");
//工具栏添加快捷键
toolBar->addAction(pNew);
QPushButton *a = new QPushButton(this);
a->setText("^_^");
toolBar->addWidget(a);
//槽函数与信号
connect(a,&QPushButton::clicked,
[=]()
{
a->setText("123");
}
);
运行结果如下
按下新建,则也可以输出“新建”
6.添加状态栏,并添加标签
需要的头文件
#include<QStatusBar>
#include<Label>
源代码
//添加状态栏
QStatusBar * sBar = statusBar();
//添加标签
QLabel *label = new QLabel(this);
label->setText("Normal text file");
sBar->addWidget(label);
//addWidget从状态栏最左边往右添加
sBar->addWidget(new QLabel("11",this));
//从状态栏最右边往左添加
sBar->addPermanentWidget(new QLabel("22",this));
运行结果
7.添加一个核心组件(文本编辑区)
需要的头文件
#include<QTextEdit>
源代码
QTextEdit *textEdit = new QTextEdit(this);
//将文本编辑组件放在主窗口的中央
setCentralWidget(textEdit);
运行结果
8.添加浮动窗口
需要的头文件
#include<QDockWidget>
源代码
//浮动窗口
QDockWidget *dock = new QDockWidget(this);
//给浮动窗口加控件
addDockWidget(Qt::RightDockWidgetArea,dock);
QTextEdit * textEdit2 = new QTextEdit(this);
dock->setWidget(textEdit2);
运行结果
9.添加模态对话框与非模态对话框
模态对话框弹出后无法操作主窗口,而非模态对话框可以操作
模态对话框就是调用的时候使用exec(),非模态对话框是使用show()来调用。
需要的头文件
#include<QDialog>
源代码
//添加模态对话框
QMenu * pDlg = mBar->addMenu("对话框");
QAction * p = pDlg->addAction("模态对话框");
connect(p,&QAction::triggered,
[=]()
{
QDialog a;
a.exec();
}
);
QAction * q= pDlg->addAction("非模态对话框");
connect(q,&QAction::triggered,
[=]()
{
QDialog *a = new QDialog(this);
a->show();
/*
不指定父对象
QDialog *dlg1 = new QDialog;
dlg1->setAttribute(Qt::WA_DeleteOnClose);//关闭对话框后释放内存
dlg1->show();
*/
}
);
运行结果
这个与浮动窗口是不一样的,浮动窗口可以附在主窗口里
如这个是浮动窗口