【QT】QT的消息盒子和对话框(自定义对话框)

一、消息盒子QMessageBox

1、弹出警告盒子

[static] StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
     返回值:点击了盒子里面的哪个按钮,返回值就返回这个按钮
       参数:parent --this,父窗口
             title --》消息盒子的标题
             text --》盒子里面的文本内容 
             buttons --》盒子默认使用哪些按钮,默认使用ok按钮
                         如果要添加多个按钮,多个按钮之间使用 按位或 连接起来
             defaultButton --》当按下回车键,默认选中的按钮

示例代码:

QMessageBox::warning(this, "警告","您输入的账号或密码错误,请重新输入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);

现象:

在这里插入图片描述

2、致命错误盒子

[static] StandardButton QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
// 定义如警告盒子

示例代码:

QMessageBox::critical(this, "致命错误","您输入的账号或密码错误,请重新输入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);

现象:

在这里插入图片描述

3、帮助盒子

[static] StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)
// 定义如警告盒子

示例代码:

QMessageBox::question(this, "帮助","您输入的账号或密码错误,请重新输入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);

现象:

在这里插入图片描述

  如何判断点击了哪个按钮
方法:通过warning函数的返回值判断,具体参见例子代码
      if(ret==QMessageBox::Ok)
      {

      }
      else  //其他按钮
      {

      }

4、示例代码:

auto ret = QMessageBox::question(this, "帮助","您输入的账号或密码错误,请重新输入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);
if (ret == QMessageBox::Ok)
{
	// 按实际逻辑做处理
    qDebug()<<"点击的是ok";
}
else
{
    qDebug()<<"点击的是close";
}

二、QT中自带的对话框

1、颜色对话框 QColorDialog

1)方法

[static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = Q_NULLPTR, const QString &title = QString())
            返回值:弹出的对话框所选中的颜色
              参数:initial --》颜色对话框默认选中的颜色
                            //依据RGB的值新建颜色对象
                            QColor(int r, int g, int b)   
                    parent --》父窗口 this
                    title --》颜色对话框的标题
                    
如何判断用户是否选中了某个颜色
  bool QColor::isValid() const
         返回值:如果用户点击ok  --》颜色就是合法,返回true
                       反之,返回false
示例代码:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_btn1_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QColorDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

// 颜色对话框
void MainWindow::on_btn1_clicked()
{
    QColor color1(0, 0, 255);
    // 弹出颜色对话框
    QColor color_ret = QColorDialog::getColor(color1, this, "颜色对话框");
    // 判断用户是点击了ok还是cancel
    if(color_ret.isValid())
    {
        qDebug()<<"点击了ok";
        // 拼接得到qss语句
        QString set_style = QString("background-color:rgb(%1,%2,%3);").arg(color_ret.red()).arg(color_ret.green()).arg(color_ret.blue());
        // 把按钮的背景色设置成自己选择的颜色
        ui->btn1->setStyleSheet(set_style);
    }
    else
    {
        qDebug()<<"点击了cancel";
    }
}
现象:

在这里插入图片描述

2、字体对话框 QFontDialog

1) 方法

[static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = Q_NULLPTR)
            返回值:所选中的字体
              参数:ok --》保存是否选中了某个字体,选中了 --true  没有选中 --false
                    parent --》父窗口 this
如何判断用户是否选中了某个字体
    方法:判断getFont的第一个参数是否为真
QString QFont::family() const
            返回值:返回选中的字体名字
int QFont::pointSize() const 
            返回值:返回选中的字体大小
示例代码:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFontDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    bool is_ok;
    QFont myFont = QFontDialog::getFont(&is_ok, this);
    if (is_ok)
    {
        qDebug()<<"选择了ok";
        ui->label->setFont(myFont);
    }
    else
    {
        qDebug()<<"选择了concel";
    }
}
现象:

在这里插入图片描述

3、文件对话框 QFileDialog

1) 方法:弹出文件对话框,让用户可以选择某个具体的文件

[static] QString QFileDialog::getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString())
                返回值:选中的某个文件的绝对路径名
                  参数:parent --》父窗口 this
                        caption --》文件对话框的标题
                        dir --》指定要打开的目录路径
                        filter --》文件过滤器,过滤掉不需要的文件
                                   比如: "*.txt"        表示只想查看文件夹中的记事本
                                          "*.txt *.bmp"  表示想查看文件夹中的记事本和bmp图片
示例代码:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QString pathName = QFileDialog::getOpenFileName(this, "打开的文件对话框", "C:/Users/xxx/Desktop/vm_shared/code/QT_proj/250406_test", "*txt *xls");
    qDebug()<< "选择的文件是"<< pathName;
}
现象:

在这里插入图片描述

2) 方法:弹出目录对话框,只能让用户选择目录,不可以选择目录中具体文件

[static] QString QFileDialog::getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString())
            返回值:选中的某个目录的绝对路径名
              参数:parent --》父窗口 this
                    caption --》目录对话框的标题
                    dir --》指定要打开的目录路径
示例代码:
 // 打开目录对话框
QString dirPath = QFileDialog::getExistingDirectory(this, "目录");

三、自定义对话框

QT添加新的ui界面总共提供三种模板,三者区别
dialog --》作为独立的弹窗来使用
mainwindow --》多界面跳转,界面直接切换
widget --》作为子窗口来使用,嵌套到mainwindow

如何新建Qdialog:
右键点击工程名–》QT设计师界面类,选择QDialog模板

1.模态和非模态

          模态对话框 --》exec(),对话框如果不关闭,无法操作其他界面
          非模态对话框 --》show(),对话框如果不关闭,不影响操作其他界面

示例代码:

firstwin.h firstwin.cpp

// firstwin.h
#ifndef FIRSTWIN_H
#define FIRSTWIN_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class firstwin; }
QT_END_NAMESPACE

class firstwin : public QMainWindow
{
    Q_OBJECT

public:
    firstwin(QWidget *parent = nullptr);
    ~firstwin();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::firstwin *ui;
};
#endif // FIRSTWIN_H

// firstwin.cpp
#include "firstwin.h"
#include "ui_firstwin.h"
#include <QDebug>
#include "secondwin.h"
#include "regdialog.h"
firstwin::firstwin(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::firstwin)
{
    ui->setupUi(this);
}

firstwin::~firstwin()
{
    delete ui;
}

//登录按钮的槽函数
void firstwin::on_pushButton_clicked()
{
    //获取输入的用户名和密码
    QString name=ui->lineEdit->text();
    QString passwd=ui->lineEdit_2->text();

    if(name=="hello" && passwd=="123456")
    {
        //跳到主界面--》第二个界面
        //创建第二个界面对象
        secondwin *win=new secondwin();
        //显示第二个界面
        win->show();
        //关闭第一个界面
        this->close();
    }
    else
        qDebug()<<"登录失败";
}
//注册按钮对应的槽函数
void firstwin::on_pushButton_2_clicked()
{
    //弹出注册对话框
    regdialog *dialog=new regdialog(this);
    //显示对话框
    //dialog->show();  //非模态对话框
    dialog->exec();    //模态对话框
}

secondwin.cpp secondwin.h

// secondwin.h
#ifndef SECONDWIN_H
#define SECONDWIN_H

#include <QMainWindow>

namespace Ui {
class secondwin;
}

class secondwin : public QMainWindow
{
    Q_OBJECT

public:
    explicit secondwin(QWidget *parent = nullptr);
    ~secondwin();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::secondwin *ui;
};

#endif // SECONDWIN_H

// secondwin.cpp
#include "secondwin.h"
#include "ui_secondwin.h"

secondwin::secondwin(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::secondwin)
{
    ui->setupUi(this);
}

secondwin::~secondwin()
{
    delete ui;
}

void secondwin::on_pushButton_clicked()
{
    //证明QWidget一般作为子窗口嵌套到QMainWindow里面
    ui->widget->hide();
}

void secondwin::on_pushButton_2_clicked()
{
    //证明QWidget一般作为子窗口嵌套到QMainWindow里面
    ui->widget->show();
}

regdialog.h regdialog.cpp

// regdialog.h
#ifndef REGDIALOG_H
#define REGDIALOG_H

#include <QDialog>

namespace Ui {
class regdialog;
}

class regdialog : public QDialog
{
    Q_OBJECT

public:
    explicit regdialog(QWidget *parent = nullptr);
    ~regdialog();

private:
    Ui::regdialog *ui;
};

#endif // REGDIALOG_H

// regdialog.cpp
#include "regdialog.h"
#include "ui_regdialog.h"

regdialog::regdialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::regdialog)
{
    ui->setupUi(this);
}

regdialog::~regdialog()
{
    delete ui;
}

现象:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值