• 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()
    {
    
    }
  • 相关阅读:
    斐波那契数列
    旋转数组的最小数字
    用两个栈实现队列
    重建二叉树
    从尾到头打印链表
    2020/01/11,人活着是为了一口气
    2020/01/11,放肆和克制,敏感层次
    2020/01/11,记忆单元
    2020/01/11,经济基础决定高层建筑和个性
    git
  • 原文地址:https://www.cnblogs.com/blog-ccs/p/7427813.html
Copyright © 2020-2023  润新知