Qt-菜单栏与工具栏
#include "mainwindow.h"
#include <QMenu>
#include <QAction>
#include <QDebug>
#include <QStatusBar>
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//添加菜单栏,MainWindow类自带一个现有的菜单不需要新创建,可以直接调用这个函数
menu = menuBar();
//添加菜单
QMenu *qm = menu->addMenu("文件");
//添加菜单项,添加动作
QAction *qa = qm->addAction(QString("新建项目/文件"));
connect(qa,&QAction::triggered,this,
[]()
{
qDebug() << "单击";
}
);
//分割线
qm->addSeparator();
//添加工具栏
toolBar = addToolBar("显示隐藏工具栏");
//把菜单栏的qa添加到工具栏
toolBar->addAction(qa);
QPushButton *button = new QPushButton("按钮",this);
//在工具栏放置按钮
toolBar->addWidget(button);
//写按钮事件
connect(button,&QPushButton::clicked,this,
[]()
{
qDebug() << "按钮被单击了";
});
//添加状态栏
QStatusBar *status = statusBar();
//添加标签,默认从左往右添加标签
status->addWidget(new QLabel("就绪",this));
//添加标签,从右往左添加标签
status->addPermanentWidget(new QLabel("准备",this));
//核心控件,文本编辑器
QTextEdit *textEdit = new QTextEdit (this);
//加入核心控件
setCentralWidget(textEdit);
//浮动窗口
QDockWidget *dock = new QDockWidget(this);
//将这个浮动窗口添加到窗口的浮动组件,并设置位置
addDockWidget(Qt::RightDockWidgetArea,dock);
//给浮动窗口添加文本编辑
QTextEdit *textEditTow = new QTextEdit (this);
dock->setWidget(textEditTow);
}
MainWindow::~MainWindow()
{
}
void MainWindow::Funcs()
{
qDebug() << "菜单点击";
}
Qt-核心控件与浮动窗口
//添加状态栏
QStatusBar *status = statusBar();
//添加标签,默认从左往右添加标签
status->addWidget(new QLabel("就绪",this));
//添加标签,从右往左添加标签
status->addPermanentWidget(new QLabel("准备",this));
//核心控件,文本编辑器
QTextEdit *textEdit = new QTextEdit (this);
//加入核心控件
setCentralWidget(textEdit);
//浮动窗口
QDockWidget *dock = new QDockWidget(this);
//将这个浮动窗口添加到窗口的浮动组件,并设置位置
addDockWidget(Qt::RightDockWidgetArea,dock);
//给浮动窗口添加文本编辑
QTextEdit *textEditTow = new QTextEdit (this);
dock->setWidget(textEditTow);
Qt-模态对话框与非模态对话框
QMenuBar *mBar = menuBar();
setMenuBar(mBar);
QMenu *qm = mBar->addMenu("对话框");
QAction *act = qm->addAction("模态对话框");
connect(act,&QAction::triggered,[](){
QDialog dlg;
//模态对话框,因为堵塞到这里所以不会因为局部变量而一闪而过
dlg.exec();
qDebug() << "我到了";
});
QAction *acts = qm->addAction("非模态对话框");
connect(acts,&QAction::triggered,[=](){
QDialog *dlg = new QDialog(this);
//对话框关闭就释放
dlg->setAttribute(Qt::WA_DeleteOnClose);
//非模态对话框,不会造成堵塞,但槽函数执行完局部变量会被释放,所以用指针或全局,因为指针只有在整个程序结束才会被释放
//所以用setAttribute函数
dlg->show();
});
Qt-标准对话框与文件对话框
模态对话框
打开对话框程序会堵塞到dlg.exec();
父窗口不允许点击
QMenuBar *mBar = menuBar();
setMenuBar(mBar);
QMenu *qm = mBar->addMenu("对话框");
QAction *act = qm->addAction("模态对话框");
connect(act,&QAction::triggered,[](){
QDialog dlg;
//模态对话框,因为堵塞到这里所以不会因为局部变量而一闪而过
dlg.exec();
qDebug() << "我到了";
});
非模态对话框
打开对话框用show();
函数
并且不会堵塞
父窗口可以进行操作
QMenuBar *mBar = menuBar();
setMenuBar(mBar);
QMenu *qm = mBar->addMenu("对话框");
QAction *act = qm->addAction("模态对话框");
connect(act,&QAction::triggered,[](){
QDialog dlg;
//模态对话框,因为堵塞到这里所以不会因为局部变量而一闪而过
dlg.exec();
qDebug() << "我到了";
});
QAction *acts = qm->addAction("非模态对话框");
connect(acts,&QAction::triggered,[=](){
QDialog *dlg = new QDialog(this);
//对话框关闭就释放
dlg->setAttribute(Qt::WA_DeleteOnClose);
//非模态对话框,不会造成堵塞,但槽函数执行完局部变量会被释放,所以用指针或全局,因为指针只有在整个程序结束才会被释放
//所以用setAttribute函数
dlg->show();
});
问题对话框
QAction *WenTi = qm->addAction("问题对话框");
connect(WenTi,&QAction::triggered,[=](){
int res = QMessageBox::question(this,"问题对话框","内容",QMessageBox::SaveAll|QMessageBox::No);
switch (res) {
case QMessageBox::SaveAll:
qDebug() << "SaveAll点击了";
break;
case QMessageBox::No:
qDebug() << "No点击";
break;
default:
break;
}
});
文件对话框
QAction *Filedialog = qm->addAction("文件对话框");
connect(Filedialog,&QAction::triggered,[=](){
QString path = QFileDialog::getOpenFileName(this,tr("路径"),"../",tr("c++文件(*.cpp *.h);;Qt(*.pro);;All(*.*)"));
QMessageBox::information(this,"路径:",path);
});
全局代码
#include "motai.h"
#include <QDebug>
MoTai::MoTai(QWidget *parent) : QMainWindow(parent)
{
QMenuBar *mBar = menuBar();
setMenuBar(mBar);
QMenu *qm = mBar->addMenu("对话框");
QAction *act = qm->addAction("模态对话框");
connect(act,&QAction::triggered,[](){
QDialog dlg;
//模态对话框,因为堵塞到这里所以不会因为局部变量而一闪而过
dlg.exec();
qDebug() << "我到了";
});
QAction *acts = qm->addAction("非模态对话框");
connect(acts,&QAction::triggered,[=](){
QDialog *dlg = new QDialog(this);
//对话框关闭就释放
dlg->setAttribute(Qt::WA_DeleteOnClose);
//非模态对话框,不会造成堵塞,但槽函数执行完局部变量会被释放,所以用指针或全局,因为指针只有在整个程序结束才会被释放
//所以用setAttribute函数
dlg->show();
});
QAction *aq3 = qm->addAction("关于");
connect(aq3,&QAction::triggered,[=](){
QMessageBox::about(this,QString("关于"),QString("这是内容"));
});
QAction *WenTi = qm->addAction("问题对话框");
connect(WenTi,&QAction::triggered,[=](){
int res = QMessageBox::question(this,"问题对话框","内容",QMessageBox::SaveAll|QMessageBox::No);
switch (res) {
case QMessageBox::SaveAll:
qDebug() << "SaveAll点击了";
break;
case QMessageBox::No:
qDebug() << "No点击";
break;
default:
break;
}
});
QAction *Filedialog = qm->addAction("文件对话框");
connect(Filedialog,&QAction::triggered,[=](){
QString path = QFileDialog::getOpenFileName(this,tr("路径"),"../",tr("c++文件(*.cpp *.h);;Qt(*.pro);;All(*.*)"));
QMessageBox::information(this,"路径:",path);
});
}
MoTai::~MoTai()
{
}