
文章目录菜单添加菜单项综合实例工具栏状态栏对话框自定义对话框菜单Qt 中的菜单栏是通过 QMenuBar 这个类来实现的。⼀个主窗⼝最多只有⼀个菜单栏。位于主窗⼝顶部、主窗⼝标题栏下⾯。//创建菜单栏QMenuBar*barmenuBar();//创建菜单QMenu*menu1newQMenu(文件);QMenu*menu2newQMenu(编辑);QMenu*menu3newQMenu(构建);bar-addMenu(menu1);bar-addMenu(menu2);bar-addMenu(menu3);添加菜单项综合实例MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(new Ui::MainWindow){ui-setupUi(this);//设置窗口标题setWindowTitle(我的记事本);//创建菜单栏QMenuBar*menubarthis-menuBar();//创建菜单QMenu*menu1newQMenu(文件);menubar-addMenu(menu1);//创建菜单项QAction*action1newQAction(保存);QAction*action2newQAction(加载);menu1-addAction(action1);menu1-addAction(action2);//创建中央控件editnewQTextEdit(this);this-setCentralWidget(edit);//edit-setPlaceholderText(此处编写文本内容);connect(action1,QAction::triggered,this,MainWindow::save);connect(action2,QAction::triggered,this,MainWindow::load);}创建菜单槽函数连接保存和加载文件实现对文件读写voidMainWindow::save(){QString filenameQFileDialog::getSaveFileName(this,保存文件,D:/Qtcode/test1);qDebug()filename:filename;// 1. 判空保护if(filename.isEmpty()){qDebug()用户取消了保存;return;}QFilefile(filename);if(file.open(QIODevice::WriteOnly|QIODevice::Text)){QTextStreamout(file);outedit-toPlainText();qDebug()保存成功;}else{qDebug()文件打开保存失败;}}voidMainWindow::load(){// 带上 QFileDialog::DontUseNativeDialog 解决底层冲突QString filenameQFileDialog::getOpenFileName(this,加载文件,D:/Qtcode/test1,,nullptr,QFileDialog::DontUseNativeDialog);if(filename.isEmpty()){return;}qDebug()filename:filename;QFilefile(filename);if(file.open(QIODevice::ReadOnly|QIODevice::Text)){QTextStreamin(file);edit-setPlainText(in.readAll());qDebug()加载成功;}}工具栏工具栏是应用程序中集成各种功能实现的快捷键使用的一个区域调用QMainWindow中的addToolBar()函数来增加工具栏每增加一个工具栏都要调用一次函数加上菜单项的工具栏也可以同时把action增加到菜单中//创建菜单QMenu*menunewQMenu(文件);menubar-addMenu(menu);//action增加到菜单栏中menu-addAction(action1);menu-addAction(action2);设置靠左靠右也可以设置是否浮动移动this-addToolBar(Qt::LeftToolBarArea,toolbar1);this-addToolBar(Qt::RightToolBarArea,toolbar2);状态栏状态栏是应用程序输出简要信息的区域一般在主窗口下方一个窗口最多有一个状态栏。有三种信息实时消息当前程序状态永久消息版本号机构名进度消息进度条显示百分比显示两秒后消失QStatusBar*stbarstatusBar();setStatusBar(stbar);stbar-showMessage(Hello_Qt,2000);永久显示信息QStatusBar*stbarstatusBar();setStatusBar(stbar);QLabel*labelnewQLabel(提示信息,this);stbar-addWidget(label);右侧显示信息对话框对话框分为模态和非模态是阻塞式对话框使用 QDialog::exec() 进行阻塞模态显示后无法与父窗口交互。非模态可以与父窗口交互是非阻塞调用使用 QDialog::show() 非阻塞非模态创建在堆上创建在栈上的话会一闪而过QMenuBar*barmenuBar();QMenu*menu1newQMenu(文件);QMenu*menu2newQMenu(编辑);bar-addMenu(menu1);bar-addMenu(menu2);QToolBar*toolbarnewQToolBar(this);addToolBar(Qt::TopToolBarArea,toolbar);QAction*action1newQAction(新建);toolbar-addAction(action1);menu1-addAction(action1);connect(action1,QAction::triggered,[](){QDialogdlg(this);dlg.resize(200,100);dlg.exec();});非模态connect(action1,QAction::triggered,[](){QDialog*dlgnewQDialog(this);dlg-resize(200,100);dlg-show();});自定义对话框voidMainWindow::on_pushButton_clicked(){Dialog*dialognewDialog(this);dialog-resize(200,200);dialog-setAttribute(Qt::WA_DeleteOnClose);//窗口关闭自动释放内存dialog-exec();}Dialog::Dialog(QWidget*parent):QDialog(parent){//创建控件加入到Dialog中以Dialog作为父窗口QVBoxLayout*layoutnewQVBoxLayout();this-setLayout(layout);QLabel*labelnewQLabel(这是一个对话框,this);QPushButton*buttonnewQPushButton(关闭,this);layout-addWidget(label);layout-addWidget(button);connect(button,QPushButton::clicked,this,Dialog::handle);}voidDialog::handle(){this-close();}