Qt入门及C++复习(适合新手--3)QMainWindow与QDialog

QMainWindow菜单栏、工具栏、状态栏、停靠窗口、中心控件

mianwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
​
#include <QMainWindow>
​
class MainWindow : public QMainWindow
{
    Q_OBJECT
​
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};
​
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
​
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QLabel>
#include <QDockWidget>
#include <QTextEdit>
​
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(400, 300);//调整窗口大小
​
    //MenuBar
    QMenuBar *menubar = new QMenuBar(this);
    setMenuBar(menubar);//只能有一个菜单栏
​    
    //在菜单栏中添加菜单项
    QMenu *filename = menubar->addMenu("文件(&F)");//快捷键ctr+F
    QMenu *editmenu = menubar->addMenu("编辑(&E)");//快捷键ctr+E
    QMenu *buildname = menubar->addMenu("构建(&B)");//快捷键ctr+B
​    
    filename->addAction("新建文件(&N)");
    filename->addAction("打开文件(&O)");
    filename->addSeparator();
    filename->addAction("关闭文件(&C)");
​
    editmenu->addAction("恢复(&U)");
    buildname->addAction("构建所有项目(&R)");
​
    //ToolBar
    QToolBar *toolbar = new QToolBar(this);
    addToolBar(Qt::TopToolBarArea, toolbar);//工具栏可以有多个
​
    toolbar->addAction("新建");
    toolbar->addAction("打开");
    toolbar->addSeparator();
    toolbar->addAction("关闭");
​
    //StatusBar
    QStatusBar *stbar = new QStatusBar(this);
    setStatusBar(stbar);
    QLabel *label = new QLabel(this);
    label->setText("状态栏");
    stbar->addWidget(label);
​
    //DockWidget浮窗
    QDockWidget *dockwidget = new QDockWidget("小窗口", this);
    addDockWidget(Qt::LeftDockWidgetArea, dockwidget);
​
    //Central Widget
    QTextEdit *edit = new QTextEdit(this);
    setCentralWidget(edit);
}
​
MainWindow::~MainWindow()
{
​
}

对话框(QDialog)

1、模态和非模态对话框

QDialog *dialog = new QDialog(this);
    dialog->resize(200, 100);
​
    //dialog->show();       //非模态对话框
​
    //dialog->exec();           //模态对话框 方式1
​
    dialog->setModal(true);  //模态对话框 方式2
    dialog->show();
​
    dialog->setAttribute(Qt::WA_DeleteOnClose);
  1. 非模态对话框:

    //dialog->show();       //非模态对话框

    如果你注释掉了 show 方法,对话框将不会被显示。通常,非模态对话框允许用户在对话框打开时与应用程序的其他部分交互。

  2. 模态对话框方式1:

    //dialog->exec();           //模态对话框 方式1

    exec 方法用于显示模态对话框。调用 exec 后,程序的执行将被阻塞,直到用户关闭对话框。这种方式适用于需要用户响应的对话框。

  3. 设置模态对话框方式2:

    dialog->setModal(true);  //模态对话框 方式2

    使用 setModal(true) 将对话框设置为模态。模态对话框会阻止用户与应用程序的其他窗口交互,直到对话框被关闭。

  4. 显示对话框:

    dialog->show();

    show 方法用于显示对话框。对于模态对话框,这将导致程序执行阻塞,直到对话框被关闭。

  5. 设置关闭时删除对话框:

    dialog->setAttribute(Qt::WA_DeleteOnClose);

    setAttribute 方法用于设置窗口的属性。Qt::WA_DeleteOnClose 属性指定当对话框关闭时,它将自动被删除,从而释放内存。如果没有设置该属性,当你多次打开关闭对话框但没有关闭程序时,会造成内存一直覆盖使用。

2、标准对话框

  1. 颜色对话框
    void MainWindow::on_pushButton_clicked()
    {
        //QColorDialog dialog(this);
        QColor color = QColorDialog::getColor(Qt::red, this);
        qDebug() << "color: " << color;
    }
  2. 文件对话框
    void MainWindow::on_pushButton_2_clicked()
    {
        QString fileName = QFileDialog::getOpenFileName(this, "Open File", "C:\\");
        //QString fileName = QFileDialog::getOpenFileName(this, "Open File", "C:\\", "图片文件(*.png *.jpg)");
        qDebug() << "fileName: " << fileName;
    }
  3. 字体对话框
    void MainWindow::on_pushButton_3_clicked()
    {
        bool ok;
    ​
        QFont font = QFontDialog::getFont(&ok, this);
        if(ok)
            ui->pushButton_3->setFont(font);
        else
            qDebug() << "没有选择任何字体";
    }
  4. 输入对话框
    void MainWindow::on_pushButton_4_clicked()
    {
        bool ok;
    ​
        QString string = QInputDialog::getText(this, "输入字符串对话框", "请输入用户名", QLineEdit::Normal, "", &ok);
        if(ok)
            qDebug() << "string: " << string;
    ​
        int value = QInputDialog::getInt(this, "输入整数对话框", "请输入0~100的整数", 0, 0, 100, 1, &ok);
        if(ok)
             qDebug() << "value = " << value;
    }
    ​
  5. 消息对话框
    void MainWindow::on_pushButton_5_clicked()
    {
        //问题对话框
        int ret1 = QMessageBox::question(this, "问题对话框", "你是否使用Qt", QMessageBox::Yes, QMessageBox::No);
        if(ret1 == QMessageBox::Yes)
            qDebug() << "Great";
    ​
        //提示对话框
        QMessageBox::information(this, "提示对话框", "你最好使用Qt", QMessageBox::Ok);
    ​
        //警告对话框
        QMessageBox::warning(this, "警告对话框", "请停止使用其他GUI", QMessageBox::Ok);
    ​
        //错误对话框
        QMessageBox::critical(this, "错误对话框", "重大错误", QMessageBox::Retry);
    ​
        //关于对话框
        QMessageBox::about(this, "关于对话框", "我爱Rick");
    }
  6. 进度对话框
    void MainWindow::on_pushButton_6_clicked()
    {
        QProgressDialog prodlg("复制内容", "取消", 0, 50000, this);
        prodlg.setWindowTitle("复制文件");
        prodlg.setWindowModality(Qt::WindowModal);
        prodlg.show();
    ​
        for(int i = 0; i < 50000; i++)
        {
            prodlg.setValue(i);
            QCoreApplication::processEvents();
    ​
            if(prodlg.wasCanceled())
                   break;
        }
        prodlg.setValue(50000);
        qDebug() << "拷贝完成";
    }
  7. 错误信息对话框
    void MainWindow::on_pushButton_7_clicked()
    {
    //    QErrorMessage *errordlg = new QErrorMessage(this);
        errordlg->setWindowTitle("错误");
        errordlg->showMessage("危险");
    }
  8. 向导对话框
    ​
    QWizardPage *createPage1(void)
    {
        QWizardPage *page = new QWizardPage;
        page->setTitle("第一步操作");
        return page;
    }
    ​
    QWizardPage *createPage2(void)
    {
        QWizardPage *page = new QWizardPage;
        page->setTitle("第二步操作");
        return page;
    }
    ​
    void MainWindow::on_pushButton_8_clicked()
    {
        QWizard wizard(this);
        wizard.setWindowTitle("向导对话框");
        wizard.addPage(createPage1());
        wizard.addPage(createPage2());
        wizard.exec();
    }
    ​

  • 20
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值