mainwindow.cpp
#include "mainwindow.h"
#include <QMenuBar> //菜单栏
#include <QMenu> //菜单
#include <QAction>
#include <QtDebug>
#include <QToolBar> //工具栏
#include <QPushButton>
#include <QStatusBar> //状态栏
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget> //模态
#include <QDialog> //对话框
#include <QMessageBox>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(600,400);
//菜单栏
QMenuBar *mBar = menuBar(); //系统自动分配,不需要调用new
setMenuBar(mBar);
//添加菜单
QMenu *pFile = mBar->addMenu("文件");
//添加菜单项
QAction *pnew_create = pFile->addAction("新建");
connect(pnew_create, &QAction::triggered,
[=]() mutable
{
qDebug() << "新建被按下";
}
);
pFile->addSeparator();//添加分割线
QAction *nopen = pFile->addAction("打开");
//工具栏,菜单项的快捷方式
QToolBar *toolBar = addToolBar("toolbar");
//工具栏添加快捷键
toolBar->addAction(pnew_create);
QPushButton *b = new QPushButton(this);
//添加小控件
toolBar->addWidget(b);
b->setText("@_@");
connect(b,&QPushButton::clicked,
[=]()
{
qDebug() << "@_@被按下";
});
//状态栏
QStatusBar *statusbar = statusBar();
QLabel *label = new QLabel(this);
label->setText("normal text file");
statusbar->addWidget(label);
//addWidget 从左向右添加
statusbar->addWidget(new QLabel("2", this));
//addPermanentWidget 从由向左添加
statusbar->addPermanentWidget(new QLabel("3",this));
//核心控件
QTextEdit *textedit = new QTextEdit(this);
//将文本编辑区设为核心控件,且右键的复制粘贴等功能系统自动写好
setCentralWidget(textedit);
//浮动窗口
QDockWidget *dock = new QDockWidget;
addDockWidget(Qt::RightDockWidgetArea,dock);
//给浮动窗口添加控件
QTextEdit *textedit1 = new QTextEdit(this);
dock->setWidget(textedit1);
//模态对话框
QMenu *menu = mBar->addMenu("对话框");
QAction *p1 = menu->addAction("模态对话框");
connect(p1,&QAction::triggered,
[=]()
{
QDialog dlg; //创建对话框
dlg.exec(); //不需调用show,若用show则是非模态对话框
});
//非模态对话框
QAction *p2 = menu->addAction("非模态对话框");
connect(p2,&QAction::triggered,
[=]()
{
//法一 dlg.show(); //创建对话框,dlg为成员对象,否则看不到对话框
//法二 QDialog *p = new QDialog(this); //使用时,会n多次分配空间
/*法三*/ QDialog *p = new QDialog; //不指定父对象
p->setAttribute(Qt::WA_DeleteOnClose); //关闭时释放
p->show();
//法一最简单,法三最灵活
});
//标准对话框:关于对话框和问题对话框
QAction *p3 = menu->addAction("关于对话框");
connect(p3,&QAction::triggered,
[=]()
{
QMessageBox::about(this,"about","关于QT");//静态成员函数,关于对话框
});
QAction *p4 = menu->addAction("问题对话框");
connect(p4,&QAction::triggered,
[=]()
{
int ret = QMessageBox::question(this,"question","Are you ready?");//静态成员函数,问题对话框,使用标准按钮
//返回值为枚举类型,可参照手册,做相应处理
/* QMessageBox::question(this,"question","Are you ready?",
QMessageBox::Ok |
QMessageBox::Cancel);//可以自己指定按钮*/
});
//文件对话框
QAction *p5= menu->addAction("文件对话框");
connect(p5,&QAction::triggered,
[=]()
{
QString path = QFileDialog::getOpenFileName(this,"open","/",
"souce(*.cpp *.h);;"
"Text(*.txt);;all(*.*)");//打开指定路径
//多个过滤条件用;;隔开,若太长,可以在分号后直接敲回车,系统会在上一行末尾自动添加后引号,构成字符串
});
}
MainWindow::~MainWindow()
{
}