一.菜单栏、工具栏、状态栏、核心控件、浮动窗口
#include "mainwindow.h"
#include <QMenuBar>//菜单栏
#include <QMenu>//菜单
#include <QAction>
#include <QDebug>
#include <QToolBar>//工具栏
#include <QPushButton>//按钮
#include <QStatusBar>//状态栏
#include <QLabel>//标签
#include <QTextEdit>//文本框
#include <QDockWidget>//浮动窗口
MainWindow::MainWindow(QWidget *parent)//继承QMainWindow的MainWindow类的构造函数
: QMainWindow(parent)
{
this->setWindowTitle("文本编译器");
resize(400,500);
//一.菜单栏
QMenuBar* mBar=menuBar();
//1.添加菜单
QMenu* pFile=mBar->addMenu("File");
//2.添加菜单项,添加动作
QAction* pNew=pFile->addAction("New Project");
connect(pNew,&QAction::triggered,
[=](){
qDebug()<<"press New Project";
}
);
pFile->addSeparator();//3.添加分割线
QAction* pOpen=pFile->addAction("Open");
connect(pOpen,&QAction::triggered,
[=](){
qDebug()<<"press Open";
}
);
//二.工具栏
//1.导航栏形式
QToolBar* toolbar=addToolBar("ToolBar");
toolbar->addAction(pNew);
toolbar->addAction(pOpen);
//2.按钮形式,添加小控件
QPushButton* b1=new QPushButton(this);
b1->setText("New Project");
connect(b1,&QPushButton::released,
[=](){
b1->setText("Open");
}
);
toolbar->addWidget(b1);
//三.状态栏
QStatusBar* sBar=statusBar();
QLabel* label1=new QLabel(this);
label1->setText("New Project");
//addWidget从左往右添加
sBar->addWidget(label1);
sBar->addWidget(new QLabel("2",this));
//addPermanentWidget从右往左添加
sBar->addPermanentWidget(new QLabel("3",this));
//四.核心控件
//1.文本框
QTextEdit* tEdit=new QTextEdit(this);
setCentralWidget(tEdit);
//五.浮动窗口
QDockWidget* dWidget=new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea,dWidget);
QTextEdit* tEdit1=new QTextEdit(this);//给浮动窗口添加文本框
dWidget->setWidget(tEdit1);
}
二.模态对话框、非模态对话框
#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDialog>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("文本编辑器");
this->resize(400,500);
QMenuBar* mBar=menuBar();
QMenu* menu1=mBar->addMenu("对话框");
//一.模态对话框
QAction* action1=menu1->addAction("模态对话框");
connect(action1,&QAction::triggered,
[=]()
{
QDialog dlg1;
dlg1.exec();//执行到此,会卡在这里,等待用户关闭对话框,再执行下面程序。
qDebug()<<"123";
}
);
menu1->addSeparator();
//二.非模块对话框
QAction* action2=menu1->addAction("非模态对话框");
connect(action2,&QAction::triggered,
[=](){
//方法一:设置为成员变量
//dlg2.show();//程序执行到这里,会继续执行下去,因此定义成成员变量,防止对话框不出现。
//qDebug()<<"456";
//方法二:定义为指针
QDialog* dlg3=new QDialog;
dlg3->setAttribute(Qt::WA_DeleteOnClose);//在对话框关闭时,自动释放内存。
dlg3->show();
qDebug()<<"789";
}
);
menu1->addSeparator();
QAction* action3=menu1->addAction("directory");
}
#include <QMainWindow>
#include <QDialog>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
//方法一:设置为成员变量
QDialog dlg2;
};
三.标准对话框
关于对话框、问题对话框。
#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("文本编辑器");
this->resize(400,500);
QMenuBar* mBar=menuBar();
QMenu* menu1=mBar->addMenu("对话框");
//三.关于对话框
QAction* action3=menu1->addAction("关于对话框");
connect(action3,&QAction::triggered,
[=](){
QMessageBox::about(this,"about","关于Qt");
}
);
//四.问题对话框
QAction* action4=menu1->addAction("问题对话框");
connect(action4,&QAction::triggered,
[=](){
int ret=QMessageBox::question(this,"question","Are you OK?");
switch (ret) {//获取问题对话框返回值
case QMessageBox::Yes:
qDebug()<<"I am OK";
break;
case QMessageBox::No:
qDebug()<<"I am Bad";
break;
default:
break;
}
//修改默认按钮Yes和No
//int ret=QMessageBox::question(this,"question","Are you OK?",QMessageBox::Open|QMessageBox::Save);
}
);
}
点击Yes结果:
修改默认按钮Yes、No:
四.文件对话框
#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("文本编辑器");
this->resize(400,500);
QMenuBar* mBar=menuBar();
QMenu* menu1=mBar->addMenu("对话框");
//五.文件对话框
QAction* action5=menu1->addAction("文件对话框");
connect(action5,&QAction::triggered,
[=](){
QString FilePath=QFileDialog::getOpenFileName(this,"open","../");
qDebug()<<FilePath;
}
);
}
给文件对话框加入过滤:
connect(action5,&QAction::triggered,
[=](){
QString FilePath=QFileDialog::getOpenFileName(this,"open","../",
"source(*.cpp *.h);;Text(*.txt);;all(*.*)");
qDebug()<<FilePath;
}
);