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()
{

}
原文地址:https://www.cnblogs.com/blog-ccs/p/7427813.html