QT学习笔记(5) 菜单栏、工具栏、窗口、对话框
本程序主要介绍了以下几种常用控件的使用方法:
(1)菜单栏、工具栏
(2)核心控件、状态栏、浮动窗口
(3)模态窗口、非模态窗口
(4)标准对话框、文件对话框
代码如下:
mainwindow.h文件
1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 #include <QDialog> 6 7 class MainWindow : public QMainWindow 8 { 9 Q_OBJECT 10 11 public: 12 MainWindow(QWidget *parent = 0); 13 ~MainWindow(); 14 15 private: 16 QDialog dialog2;//用于非模态窗口的显示 17 }; 18 19 #endif // MAINWINDOW_H
mainwindow.cpp文件
#include "mainwindow.h" #include <QMenuBar>//菜单栏 #include <QMenu>//菜单 #include <QAction>//菜单项 #include <QDebug> #include <QToolBar>//工具栏 #include <QPushButton> #include <QStatusBar>//状态栏 #include <QLabel>//标签 #include <QTextEdit>//文本 #include <QDockWidget>//浮动窗口 #include <QDialog>//对话框 #include <QMessageBox>//消息对话框 #include <QFileDialog>//文件对话框 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { //菜单栏 //定义菜单栏 QMenuBar *mBar = menuBar(); //添加菜单 QMenu *pFile = mBar->addMenu("wenjian"); //添加菜单项,添加动作 QAction *pNew = pFile->addAction("xinjian"); //给菜单项建立连接,完成相应的操作 connect(pNew,&QAction::triggered, [=]() { qDebug() << "xinjian" ; } ); //给菜单项之间添加分割线 pFile->addSeparator(); QAction *pOpen = pFile->addAction("dakai"); //工具栏 //工具栏中存放的大多是菜单项的快捷方式 QToolBar *toolBar = addToolBar("toolbar"); //工具栏添加快捷键,直接把菜单项的指针添加到工具栏 toolBar->addAction(pNew); //向工具栏添加控件,并添加操作 QPushButton * b = new QPushButton(this); b->setText("-_-"); toolBar->addWidget(b); connect(b,&QPushButton::clicked, [=]() { b->setText("123"); } );//注意此处的; //状态栏 QStatusBar *sBar = statusBar(); QLabel *label = new QLabel(this); label->setText("Normal text file"); sBar->addWidget(label); //从左网往右依次添加 sBar->addWidget(new QLabel("2",this)); //从右往左依次添加 sBar->addPermanentWidget(new QLabel("3",this)); //核心控件 QTextEdit *textEdit = new QTextEdit(this); setCentralWidget(textEdit); //浮动窗口 QDockWidget *dock = new QDockWidget(this); addDockWidget(Qt::LeftDockWidgetArea,dock);//存放的位置,存放的窗口 QTextEdit *textEdit1 = new QTextEdit(this); dock->setWidget(textEdit1);//向浮动窗口添加东西 //模态对话框和非模态对话框 QMenu *pDialog = mBar->addMenu("Dialog"); //模态对话框 QAction *p1 = pDialog->addAction("motai"); connect(p1,&QAction::triggered, [=]() { QDialog dialog1; dialog1.exec();//此处会一直运行 qDebug() << "motai" ; } ); //非模态对话框 QAction *p2 = pDialog->addAction("feimotai"); connect(p2,&QAction::triggered, [=]() { //QDialog dialog1; //如果在函数体内声明,dialog1相当于局部变量,会在跳出是直接消失 //dialog1.show(); //解决办法1:把dialog1当做成员变量 dialog2.show(); qDebug() << "feimotai" ; //解决办法2:动态分配内存空间 QDialog *dialog3 = new QDialog(this); //由于分配的内存空间只有在系统结束时才释放,如果经常需要打开此窗口,会导致内存越用越少 //所以要设置属性为关闭时释放空间 dialog3->setAttribute(Qt::WA_DeleteOnClose); dialog3->show(); } ); //标准对话框和文件对话框 QMenu *pMessage = mBar->addMenu("MessageBox"); //关于对话框 QAction *p3 = pMessage->addAction("guanyu"); connect(p3,&QAction::triggered, [=]() { QMessageBox::about(this,"guanyu","guanyuQT"); } ); //问题对话框 QAction *p4 = pMessage->addAction("wenti"); connect(p4,&QAction::triggered, [=]() { int ret = QMessageBox::question(this, "question", "Are you ok?", QMessageBox::Ok | QMessageBox::Cancel); switch(ret) { case QMessageBox::Ok: qDebug() << "i am OK" ; break; case QMessageBox::Cancel: qDebug() << "i am Cancel" ; break; default: break; } } ); //文件对话框 QAction *p5 = pMessage->addAction("wenjian"); connect(p5,&QAction::triggered, [=]() { QString path = QFileDialog::getOpenFileName(this, "open", "../", "source(*.cpp *.h);;" "Text(*.txt);;" "all(*.*)"); qDebug() << path ; } ); } MainWindow::~MainWindow() { }