Qt的一些组件以及注意

8 篇文章 0 订阅
6 篇文章 0 订阅
Qt-菜单栏与工具栏
#include "mainwindow.h"
#include <QMenu>
#include <QAction>
#include <QDebug>
#include <QStatusBar>
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //添加菜单栏,MainWindow类自带一个现有的菜单不需要新创建,可以直接调用这个函数
    menu = menuBar();
    //添加菜单
    QMenu *qm = menu->addMenu("文件");
    //添加菜单项,添加动作
    QAction *qa = qm->addAction(QString("新建项目/文件"));
    connect(qa,&QAction::triggered,this,
            []()
    {
        qDebug() << "单击";
    }
    );
    //分割线
    qm->addSeparator();
    //添加工具栏
    toolBar = addToolBar("显示隐藏工具栏");
    //把菜单栏的qa添加到工具栏
    toolBar->addAction(qa);
    QPushButton *button = new QPushButton("按钮",this);
    //在工具栏放置按钮
    toolBar->addWidget(button);
    //写按钮事件
    connect(button,&QPushButton::clicked,this,
            []()
    {
       qDebug() << "按钮被单击了";
    });
    //添加状态栏
    QStatusBar *status = statusBar();
    //添加标签,默认从左往右添加标签
    status->addWidget(new QLabel("就绪",this));
    //添加标签,从右往左添加标签
    status->addPermanentWidget(new QLabel("准备",this));
    //核心控件,文本编辑器
    QTextEdit *textEdit = new QTextEdit (this);
    //加入核心控件
    setCentralWidget(textEdit);
    //浮动窗口
    QDockWidget *dock = new QDockWidget(this);
    //将这个浮动窗口添加到窗口的浮动组件,并设置位置
    addDockWidget(Qt::RightDockWidgetArea,dock);
    //给浮动窗口添加文本编辑
    QTextEdit *textEditTow = new QTextEdit (this);
    dock->setWidget(textEditTow);

}

MainWindow::~MainWindow()
{
}
void MainWindow::Funcs()
{
    qDebug() << "菜单点击";
}

Qt-核心控件与浮动窗口
//添加状态栏
    QStatusBar *status = statusBar();
    //添加标签,默认从左往右添加标签
    status->addWidget(new QLabel("就绪",this));
    //添加标签,从右往左添加标签
    status->addPermanentWidget(new QLabel("准备",this));
    //核心控件,文本编辑器
    QTextEdit *textEdit = new QTextEdit (this);
    //加入核心控件
    setCentralWidget(textEdit);
    //浮动窗口
    QDockWidget *dock = new QDockWidget(this);
    //将这个浮动窗口添加到窗口的浮动组件,并设置位置
    addDockWidget(Qt::RightDockWidgetArea,dock);
    //给浮动窗口添加文本编辑
    QTextEdit *textEditTow = new QTextEdit (this);
    dock->setWidget(textEditTow);
Qt-模态对话框与非模态对话框
QMenuBar *mBar = menuBar();
    setMenuBar(mBar);
    QMenu *qm = mBar->addMenu("对话框");
    QAction *act = qm->addAction("模态对话框");
    connect(act,&QAction::triggered,[](){
        QDialog dlg;
        //模态对话框,因为堵塞到这里所以不会因为局部变量而一闪而过
        dlg.exec();
        qDebug() << "我到了";
    });
    QAction *acts = qm->addAction("非模态对话框");
    connect(acts,&QAction::triggered,[=](){
        QDialog *dlg = new QDialog(this);
        //对话框关闭就释放
        dlg->setAttribute(Qt::WA_DeleteOnClose);
        //非模态对话框,不会造成堵塞,但槽函数执行完局部变量会被释放,所以用指针或全局,因为指针只有在整个程序结束才会被释放
        //所以用setAttribute函数
        dlg->show();
    });

Qt-标准对话框与文件对话框

模态对话框

打开对话框程序会堵塞到dlg.exec();
父窗口不允许点击

QMenuBar *mBar = menuBar();
setMenuBar(mBar);
    QMenu *qm = mBar->addMenu("对话框");
    QAction *act = qm->addAction("模态对话框");
    connect(act,&QAction::triggered,[](){
        QDialog dlg;
        //模态对话框,因为堵塞到这里所以不会因为局部变量而一闪而过
        dlg.exec();
        qDebug() << "我到了";
    });
非模态对话框

打开对话框用show();函数
并且不会堵塞
父窗口可以进行操作

QMenuBar *mBar = menuBar();
    setMenuBar(mBar);
    QMenu *qm = mBar->addMenu("对话框");
    QAction *act = qm->addAction("模态对话框");
    connect(act,&QAction::triggered,[](){
        QDialog dlg;
        //模态对话框,因为堵塞到这里所以不会因为局部变量而一闪而过
        dlg.exec();
        qDebug() << "我到了";
    });
    QAction *acts = qm->addAction("非模态对话框");
    connect(acts,&QAction::triggered,[=](){
        QDialog *dlg = new QDialog(this);
        //对话框关闭就释放
        dlg->setAttribute(Qt::WA_DeleteOnClose);
        //非模态对话框,不会造成堵塞,但槽函数执行完局部变量会被释放,所以用指针或全局,因为指针只有在整个程序结束才会被释放
        //所以用setAttribute函数
        dlg->show();
    });
问题对话框
QAction *WenTi = qm->addAction("问题对话框");
    connect(WenTi,&QAction::triggered,[=](){
        int res = QMessageBox::question(this,"问题对话框","内容",QMessageBox::SaveAll|QMessageBox::No);
        switch (res) {
        case QMessageBox::SaveAll:
            qDebug() << "SaveAll点击了";
            break;
        case QMessageBox::No:
            qDebug() << "No点击";
            break;
        default:
            break;
        }
    });
文件对话框
QAction *Filedialog = qm->addAction("文件对话框");
    connect(Filedialog,&QAction::triggered,[=](){
        QString path = QFileDialog::getOpenFileName(this,tr("路径"),"../",tr("c++文件(*.cpp *.h);;Qt(*.pro);;All(*.*)"));
        QMessageBox::information(this,"路径:",path);
    });
全局代码
#include "motai.h"
#include <QDebug>
MoTai::MoTai(QWidget *parent) : QMainWindow(parent)
{
    QMenuBar *mBar = menuBar();
    setMenuBar(mBar);
    QMenu *qm = mBar->addMenu("对话框");
    QAction *act = qm->addAction("模态对话框");
    connect(act,&QAction::triggered,[](){
        QDialog dlg;
        //模态对话框,因为堵塞到这里所以不会因为局部变量而一闪而过
        dlg.exec();
        qDebug() << "我到了";
    });
    QAction *acts = qm->addAction("非模态对话框");
    connect(acts,&QAction::triggered,[=](){
        QDialog *dlg = new QDialog(this);
        //对话框关闭就释放
        dlg->setAttribute(Qt::WA_DeleteOnClose);
        //非模态对话框,不会造成堵塞,但槽函数执行完局部变量会被释放,所以用指针或全局,因为指针只有在整个程序结束才会被释放
        //所以用setAttribute函数
        dlg->show();
    });

    QAction *aq3 = qm->addAction("关于");
    connect(aq3,&QAction::triggered,[=](){
        QMessageBox::about(this,QString("关于"),QString("这是内容"));
    });
    QAction *WenTi = qm->addAction("问题对话框");
    connect(WenTi,&QAction::triggered,[=](){
        int res = QMessageBox::question(this,"问题对话框","内容",QMessageBox::SaveAll|QMessageBox::No);
        switch (res) {
        case QMessageBox::SaveAll:
            qDebug() << "SaveAll点击了";
            break;
        case QMessageBox::No:
            qDebug() << "No点击";
            break;
        default:
            break;
        }
    });
    QAction *Filedialog = qm->addAction("文件对话框");
    connect(Filedialog,&QAction::triggered,[=](){
        QString path = QFileDialog::getOpenFileName(this,tr("路径"),"../",tr("c++文件(*.cpp *.h);;Qt(*.pro);;All(*.*)"));
        QMessageBox::information(this,"路径:",path);
    });
}

MoTai::~MoTai()
{
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值