QT中菜单栏,工具栏,核心控件,浮动窗口,模态和非模态对话框,标准对话框和文件对话框的使用

 mainwindow.cpp

#include "mainwindow.h"
#include <QMenuBar>   //菜单栏
#include <QMenu>      //菜单
#include <QAction>
#include <QtDebug>
#include <QToolBar>   //工具栏
#include <QPushButton>
#include <QStatusBar> //状态栏
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget> //模态
#include <QDialog> //对话框
#include <QMessageBox>
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(600,400);
    //菜单栏
    QMenuBar *mBar = menuBar();  //系统自动分配,不需要调用new
    setMenuBar(mBar);
    //添加菜单
    QMenu *pFile = mBar->addMenu("文件");
    //添加菜单项
    QAction *pnew_create = pFile->addAction("新建");

    connect(pnew_create, &QAction::triggered,
            [=]() mutable
            {
                qDebug() << "新建被按下";
            }
            );
    pFile->addSeparator();//添加分割线
    QAction *nopen = pFile->addAction("打开");

    //工具栏,菜单项的快捷方式
    QToolBar *toolBar = addToolBar("toolbar");
    //工具栏添加快捷键
    toolBar->addAction(pnew_create);

    QPushButton *b = new QPushButton(this);
    //添加小控件
    toolBar->addWidget(b);
    b->setText("@_@");
    connect(b,&QPushButton::clicked,
            [=]()
            {
               qDebug() << "@_@被按下";
            });

    //状态栏
    QStatusBar *statusbar = statusBar();
    QLabel *label = new QLabel(this);
    label->setText("normal text file");
    statusbar->addWidget(label);
    //addWidget 从左向右添加
    statusbar->addWidget(new QLabel("2", this));
    //addPermanentWidget 从由向左添加
    statusbar->addPermanentWidget(new QLabel("3",this));

    //核心控件
    QTextEdit *textedit = new QTextEdit(this);
    //将文本编辑区设为核心控件,且右键的复制粘贴等功能系统自动写好
    setCentralWidget(textedit);

    //浮动窗口
    QDockWidget *dock = new QDockWidget;
    addDockWidget(Qt::RightDockWidgetArea,dock);
    //给浮动窗口添加控件
    QTextEdit *textedit1 = new QTextEdit(this);
    dock->setWidget(textedit1);
    //模态对话框
    QMenu *menu = mBar->addMenu("对话框");
    QAction *p1 =  menu->addAction("模态对话框");
    connect(p1,&QAction::triggered,
            [=]()
            {
                QDialog dlg;  //创建对话框
                dlg.exec();   //不需调用show,若用show则是非模态对话框
            });
    //非模态对话框
    QAction *p2 =  menu->addAction("非模态对话框");
    connect(p2,&QAction::triggered,
            [=]()
            {
//法一         dlg.show();  //创建对话框,dlg为成员对象,否则看不到对话框

//法二         QDialog *p = new QDialog(this); //使用时,会n多次分配空间
/*法三*/       QDialog *p = new QDialog; //不指定父对象
              p->setAttribute(Qt::WA_DeleteOnClose);  //关闭时释放
              p->show();
//法一最简单,法三最灵活
            });
//标准对话框:关于对话框和问题对话框
    QAction *p3 =  menu->addAction("关于对话框");
    connect(p3,&QAction::triggered,
            [=]()
            {
               QMessageBox::about(this,"about","关于QT");//静态成员函数,关于对话框
            });
    QAction *p4 =  menu->addAction("问题对话框");
    connect(p4,&QAction::triggered,
            [=]()
            {
               int ret = QMessageBox::question(this,"question","Are you ready?");//静态成员函数,问题对话框,使用标准按钮
               //返回值为枚举类型,可参照手册,做相应处理
         /*    QMessageBox::question(this,"question","Are you ready?",
                                               QMessageBox::Ok |
                                               QMessageBox::Cancel);//可以自己指定按钮*/
            });
    //文件对话框
    QAction *p5=  menu->addAction("文件对话框");
    connect(p5,&QAction::triggered,
            [=]()
            {
               QString path = QFileDialog::getOpenFileName(this,"open","/",
                                                           "souce(*.cpp *.h);;"
                                                           "Text(*.txt);;all(*.*)");//打开指定路径
                                                           //多个过滤条件用;;隔开,若太长,可以在分号后直接敲回车,系统会在上一行末尾自动添加后引号,构成字符串
            });
}

MainWindow::~MainWindow()
{

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值