QT学习总结-标准对话框

标准对话框

包括文件对话框,可进行文件的选择;颜色对话框,可对颜色进行选择;字体对话框,可对字体的样式进行选择;输入对话框,控制对不同的文字进行输入;消息对话框,包括信息提示框、询问提示框、警告提示框、错误提示框和帮助提示框。

一、文件对话框

创建dialog类继承于QDialog类,通过点击按钮,弹出对话框进行文件选择。
dialog.h:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

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

private slots:
    void loadFile();
private:
    Ui::Dialog *ui;
    QPushButton *fileBtn;   //文件按鈕
    QLineEdit *fileUrl;     //存文件路勁

    QGridLayout *myLayout;  //佈局

};
#endif // DIALOG_H

dialog.cpp:

#include "dialog.h"
#include "ui_dialog.h"

#include <QFileDialog>
#include <QDebug>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    fileBtn = new QPushButton("點擊選擇文件");
    fileUrl = new QLineEdit;

    myLayout = new QGridLayout(this);
    myLayout->addWidget(fileBtn,0,0);
    myLayout->addWidget(fileUrl,0,1);

    connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);
}

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

void Dialog::loadFile()
{
//打开一个文件
//    QString path =  QFileDialog::getOpenFileName(this,"標準對話框",".","c++(*.cpp);;c file(*.c);;header(*.h)");
//打开多个文件
//    QStringList strList = QFileDialog::getOpenFileNames(this,"選擇多個文件",".","c++(*.cpp);;c file(*.c);;header(*.h)");
//选择保存一个文件
//    QString path = QFileDialog::getSaveFileName(this,"保存文件",".","c++(*.cpp);;c file(*.c);;header(*.h)");
//打开已有目录
//    QString path = QFileDialog::getExistingDirectory(this,"打開已有的目錄",".");
//选择一个文件,可支持远程网络文件
      QUrl url = QFileDialog::getOpenFileUrl(this,"保存文件",QUrl(""),"c++(*.cpp);;c file(*.c);;header(*.h)");


//    QString path;
//    foreach(QString str,strList){
//        path += str;
//        fileUrl->setText(path);
//    }
//    fileUrl->setText(path);
      qDebug() << url;
}

其中常用的有getOpenFileName、getOpenFileNames、getSaveFileName、getExistingDirectory、getOpenFileUrl方法。

1.1 getOpenFileName

调用这个方法,文件提示框中可以进行选择一个文件。

//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:一般为"."
//filter:过滤文件类型,多种类型间用;;隔开
static QString getOpenFileName(QWidget *parent = nullptr,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = nullptr,
                                   Options options = Options());

1.2 getOpenFileNames

文件提示框中可以同时选择多个文件。

//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:一般为"."
//filter:过滤文件类型,多种类型间用;;隔开
static QString getOpenFileNames(QWidget *parent = nullptr,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = nullptr,
                                   Options options = Options());

1.3 getSaveFileName

可选择一个目录进行文件的保存。

//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:一般为"."
//filter:过滤文件类型,多种类型间用;;隔开
static QString getSaveFileName(QWidget *parent = nullptr,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = nullptr,
                                   Options options = Options());

1.4 getExistingDirectory

选择一个已存在的目录。

//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:一般为"."
static QString getExistingDirectory(QWidget *parent = nullptr,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   Options options = ShowDirsOnly);

1.5 getOpenFileUrl

选择一个文件,可以是远程网络文件。

//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:为寻找的文件路径
//filter:过滤文件类型,多种类型间用;;隔开
static QUrl getOpenFileUrl(QWidget *parent = nullptr,
                               const QString &caption = QString(),
                               const QUrl &dir = QUrl(),
                               const QString &filter = QString(),
                               QString *selectedFilter = nullptr,
                               Options options = Options(),
                               const QStringList &supportedSchemes = QStringList());

二、颜色对话框

在dialog类中添加按钮,通过点击按钮,弹出颜色对话框进行颜色选择。

2.1 getColor

颜色对话框常用的方法为getColor,返回类型为QColor,
参数1:默认选中的颜色;参数2:显示的窗体组件,参数3:对话框标题

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>
#include <QFrame>
#include "message.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

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

private slots:
    void loadFile();
    void loadMsg();
    void loadMyMsg();
private:
    Ui::Dialog *ui;
    QPushButton *fileBtn;   //文件按鈕
    QLineEdit *fileUrl;     //存文件路勁
    QPushButton *colBtn;    //颜色按钮
    QFrame *color;          //填充颜色

    QGridLayout *myLayout;  //佈局

};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

#include <QFileDialog>
#include <QDebug>
#include <QColorDialog>
#include <QColor>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    fileBtn = new QPushButton("點擊選擇文件");
    fileUrl = new QLineEdit;

    myLayout = new QGridLayout(this);
    myLayout->addWidget(fileBtn,0,0);
    myLayout->addWidget(fileUrl,0,1);

    connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);

    //颜色对话框
    colBtn = new QPushButton("点击选择颜色");
    color = new QFrame;
    color->setFrameStyle(QFrame::Box);  //设置为盒子风格
    color->setAutoFillBackground(true); //设置可进行颜色填充

    myLayout->addWidget(colBtn,1,0);
    myLayout->addWidget(color,1,1);
    connect(colBtn,&QPushButton::clicked,this,&Dialog::loadColor);
}

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

void Dialog::loadFile()
{
//略。。。。
}

void Dialog::loadColor()
{
	//getColor返回类型为QColor
	//参数1:默认选中的颜色;参数2:显示的窗体组件,参数3:对话框标题
    QColor col = QColorDialog::getColor(Qt::yellow,this,"颜色");
    color->setPalette(QPalette(col));
}

三、字体对话框

在dialog类中添加按钮,通过点击按钮,弹出字体对话框进行字体样式选择。

3.1 getFont

字体对话框常用的方法为getFont,返回类型为QFont,
参数1:存是否改变字体成功;参数2:显示在哪个窗体组件

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>
#include <QFrame>
#include "message.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

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

private slots:
    void loadFile();
    void loadColor();
    void loadTextStyle();
    void loadMsg();
    void loadMyMsg();
private:
    Ui::Dialog *ui;
    QPushButton *fileBtn;   //文件按鈕
    QLineEdit *fileUrl;     //存文件路勁
    QPushButton *colBtn;    //颜色按钮
    QFrame *color;          //填充颜色
    QPushButton *textBtn;   //字体按钮
    QLineEdit *textEdit;    //显示字体样式
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

#include <QFileDialog>
#include <QDebug>
#include <QColorDialog>
#include <QColor>
#include <QFontDialog>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    fileBtn = new QPushButton("點擊選擇文件");
    fileUrl = new QLineEdit;

    myLayout = new QGridLayout(this);
    myLayout->addWidget(fileBtn,0,0);
    myLayout->addWidget(fileUrl,0,1);

    connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);

    //颜色对话框
    colBtn = new QPushButton("点击选择颜色");
    color = new QFrame;
    color->setFrameStyle(QFrame::Box);  //设置为盒子风格
    color->setAutoFillBackground(true); //设置可进行颜色填充

    myLayout->addWidget(colBtn,1,0);
    myLayout->addWidget(color,1,1);
    connect(colBtn,&QPushButton::clicked,this,&Dialog::loadColor);

    //字体对话框
    textBtn = new QPushButton("点击选择字体样式");
    textEdit = new QLineEdit("用来测试的文字");

    myLayout->addWidget(textBtn,2,0);
    myLayout->addWidget(textEdit,2,1);
    connect(textBtn,&QPushButton::clicked,this,&Dialog::loadTextStyle);
}

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

void Dialog::loadFile()
{
//略。。。。

}

void Dialog::loadColor()
{
    QColor col = QColorDialog::getColor(Qt::yellow,this,"颜色");
    color->setPalette(QPalette(col));
}

void Dialog::loadTextStyle()
{
    bool ok;
    QFont font = QFontDialog::getFont(&ok,this);
    if(ok){
        textEdit->setFont(font);
    }
}

四、输入对话框

创建一个input类,继承QDialog类,通过点击按钮,弹出对话框进行内容的输入。
input.h

#ifndef INPUT_H
#define INPUT_H

#include <QDialog>
#include <QPushButton>
#include <QLabel>
#include <QGridLayout>

class Input : public QDialog
{
    Q_OBJECT
public:
    Input(QWidget *parent = nullptr);

private slots:
    void changeName();
    void changeSex();
    void changeAge();
    void changeScore();
private:
    //标签名
    QLabel *nameTitle;
    QLabel *sexTitle;
    QLabel *ageTitle;
    QLabel *scoreTitle;

    //显示的内容
    QLabel *name;
    QLabel *sex;
    QLabel *age;
    QLabel *score;

    QPushButton *nameBtn;   //姓名按钮
    QPushButton *sexBtn;    //性别按钮
    QPushButton *ageBtn;    //年龄按钮
    QPushButton *scoreBtn;  //分数按钮

    QGridLayout *myLayout;
};

#endif // INPUT_H

input.cpp

#include "input.h"
#include <QInputDialog>
#include <QStringList>

Input::Input(QWidget *parent): QDialog(parent)
{
    nameTitle = new QLabel("姓名:");
    sexTitle = new QLabel("性别:");
    ageTitle = new QLabel("年龄:");
    scoreTitle = new QLabel("分数:");

    name = new QLabel("冰冰");
    sex = new QLabel("女生");
    age = new QLabel("30");
    score = new QLabel("98");

    //设置凹陷属性
    name->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    sex->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    age->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    score->setFrameStyle(QFrame::Panel | QFrame::Sunken);


    nameBtn = new QPushButton("更改姓名");   //姓名按钮
    sexBtn = new QPushButton("更改性别");    //性别按钮
    ageBtn = new QPushButton("更改年龄");    //年龄按钮
    scoreBtn = new QPushButton("更改分数");  //分数按钮

    myLayout = new QGridLayout(this);
    myLayout->addWidget(nameTitle,0,0);
    myLayout->addWidget(name,0,1);
    myLayout->addWidget(nameBtn,0,2);

    myLayout->addWidget(sexTitle,1,0);
    myLayout->addWidget(sex,1,1);
    myLayout->addWidget(sexBtn,1,2);

    myLayout->addWidget(ageTitle,2,0);
    myLayout->addWidget(age,2,1);
    myLayout->addWidget(ageBtn,2,2);

    myLayout->addWidget(scoreTitle,3,0);
    myLayout->addWidget(score,3,1);
    myLayout->addWidget(scoreBtn,3,2);

    connect(nameBtn,&QPushButton::clicked,this,&Input::changeName);
    connect(sexBtn,&QPushButton::clicked,this,&Input::changeSex);
    connect(ageBtn,&QPushButton::clicked,this,&Input::changeAge);
    connect(scoreBtn,&QPushButton::clicked,this,&Input::changeScore);
}

void Input::changeName()
{
    bool ok;
    QString newName = QInputDialog::getText(this,"姓名","更改姓名",QLineEdit::Normal,name->text(),&ok);
    if(ok && !newName.isEmpty()){
        name->setText(newName);
    }
}

void Input::changeSex()
{
    bool ok;
    QStringList list;
    list << "男" << "女";
    QString newSex = QInputDialog::getItem(this,"性别","更改性别",list,0,false,&ok);
    if(ok && !newSex.isEmpty()){
        sex->setText(newSex);
    }
}

void Input::changeAge()
{
    bool ok;
    int newAge = QInputDialog::getInt(this,"年龄","更改年龄",age->text().toInt(),0,110,1,&ok);
    if(ok){
        age->setText(QString::number(newAge));
    }
}

void Input::changeScore()
{
    bool ok;
    double newScore = QInputDialog::getDouble(this,"分数","更改分数",score->text().toDouble(),0,100,1,&ok);
    if(ok){
        score->setText(QString::number(newScore));
    }
}

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>
#include <QFrame>
#include "message.h"
#include "input.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

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

private slots:
    void loadFile();
    void loadColor();
    void loadTextStyle();
    void loadInput();
private:
    Ui::Dialog *ui;
    QPushButton *fileBtn;   //文件按鈕
    QLineEdit *fileUrl;     //存文件路勁
    QPushButton *colBtn;    //颜色按钮
    QFrame *color;          //填充颜色
    QPushButton *textBtn;   //字体按钮
    QLineEdit *textEdit;    //显示字体样式
    QPushButton *inputBtn;	//显示输入对话框

    QGridLayout *myLayout;  //佈局

    Input *input;
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

#include <QFileDialog>
#include <QDebug>
#include <QColorDialog>
#include <QColor>
#include <QFontDialog>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    fileBtn = new QPushButton("點擊選擇文件");
    fileUrl = new QLineEdit;

    myLayout = new QGridLayout(this);
    myLayout->addWidget(fileBtn,0,0);
    myLayout->addWidget(fileUrl,0,1);

    connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);

    //颜色对话框
    colBtn = new QPushButton("点击选择颜色");
    color = new QFrame;
    color->setFrameStyle(QFrame::Box);  //设置为盒子风格
    color->setAutoFillBackground(true); //设置可进行颜色填充

    myLayout->addWidget(colBtn,1,0);
    myLayout->addWidget(color,1,1);
    connect(colBtn,&QPushButton::clicked,this,&Dialog::loadColor);

    //字体对话框
    textBtn = new QPushButton("点击选择字体样式");
    textEdit = new QLineEdit("用来测试的文字");

    myLayout->addWidget(textBtn,2,0);
    myLayout->addWidget(textEdit,2,1);
    connect(textBtn,&QPushButton::clicked,this,&Dialog::loadTextStyle);

    //输入对话框
    inputBtn = new QPushButton("点击进行输入");
    myLayout->addWidget(inputBtn,3,0,1,2);
    connect(inputBtn,&QPushButton::clicked,this,&Dialog::loadInput);
}

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

void Dialog::loadFile()
{
 //略
}

void Dialog::loadColor()
{
 //略
}

void Dialog::loadInput()
{
    input = new Input(this);
    input->show();
}

4.1 getText

进行单行文字的输入

//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:输入框的类型
//参数5:输入框中显示的内容
//参数6:输入内容是否成功
static QString getText(QWidget *parent, const QString &title, const QString &label,
                     QLineEdit::EchoMode echo = QLineEdit::Normal,
                     const QString &text = QString(), bool *ok = nullptr,
                     Qt::WindowFlags flags = Qt::WindowFlags(),
                     Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

4.2 getlnt

进行整数的输入,只能输入整数

//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:输入框中显示的内容
//参数5:最小值
//参数6:最大值
//参数7:步长(每次增加多少)
//参数8:输入内容是否成功
static int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0,
                      int minValue = -2147483647, int maxValue = 2147483647,
                      int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

4.3 getDouble

进行浮点数的输入,只能输入浮点数

//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:输入框中显示的内容
//参数5:最小值
//参数6:最大值
//参数7:步长(每次增加多少)
//参数8:输入内容是否成功
static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0,
                            double minValue = -2147483647, double maxValue = 2147483647,
                            int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

4.4 getltem

可进行内容的下拉,下拉选择内容

//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:可下拉选择的内容
//参数5:当前显示的内容
//参数6:是否可编辑
//参数7:输入内容是否成功
static QString getItem(QWidget *parent, const QString &title, const QString &label,
                           const QStringList &items, int current = 0, bool editable = true,
                           bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(),
                           Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

4.5 getMultiLineText

输入多行字符串

//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:输入框中显示的内容
//参数5:输入内容是否成功
static QString getMultiLineText(QWidget *parent, const QString &title, const QString &label,
                                    const QString &text = QString(), bool *ok = nullptr,
                                    Qt::WindowFlags flags = Qt::WindowFlags(),
                                    Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

五、消息对话框

创建一个message类,继承QDialog类,通过点击按钮,弹出消息对话框,提示信息。
message.h

#ifndef MESSAGE_H
#define MESSAGE_H

#include <QPushButton>
#include <QGridLayout>
#include <QDialog>
#include <QLabel>
#include <QMessageBox>

class Message : public QDialog
{
    Q_OBJECT

public:
    Message(QWidget *parent);

private slots:
    void getInfo();
    void getQue();
    void getWar();
    void getCriti();
    void getAbout();
    void getAboutQt();

private:
    QPushButton *infoBtn;   //信息提示框
    QPushButton *queBtn;    //询问对话框
    QPushButton *warBtn;    //警告提示框
    QPushButton *critiBtn;  //错误提示框
    QPushButton *aboutBtn;  //关于对话框
    QPushButton *aboutQtBtn;   //QT帮助提示框

    QLabel *msgLabel;
    QGridLayout *myLayout;
    void chageMsg(QMessageBox::StandardButton but);
};

#endif // MESSAGE_H

message.cpp

#include "message.h"

Message::Message(QWidget *parent): QDialog(parent)
{
    infoBtn = new QPushButton("提示信息");
    queBtn = new QPushButton("提示问题");
    warBtn = new QPushButton("提示警告");
    critiBtn = new QPushButton("提示错误");
    aboutBtn = new QPushButton("提示关于");
    aboutQtBtn = new QPushButton("提示关于Qt");
    msgLabel = new QLabel("此处显示点击消息时间");

    myLayout = new QGridLayout(this);
    myLayout->addWidget(msgLabel,0,0,1,2);
    myLayout->addWidget(infoBtn,1,0);
    myLayout->addWidget(queBtn,1,1);
    myLayout->addWidget(warBtn,2,0);
    myLayout->addWidget(critiBtn,2,1);
    myLayout->addWidget(aboutBtn,3,0);
    myLayout->addWidget(aboutQtBtn,3,1);

    connect(infoBtn,&QPushButton::clicked,this,&Message::getInfo);
    connect(queBtn,&QPushButton::clicked,this,&Message::getQue);
    connect(warBtn,&QPushButton::clicked,this,&Message::getWar);
    connect(critiBtn,&QPushButton::clicked,this,&Message::getCriti);
    connect(aboutBtn,&QPushButton::clicked,this,&Message::getAbout);
    connect(aboutQtBtn,&QPushButton::clicked,this,&Message::getAboutQt);
}

void Message::getInfo()
{
    msgLabel->setText("点击消息提示框");
    QMessageBox::StandardButton btn = QMessageBox::information(this,"消息提示","这是一条消息提示框。。。",
                                                               QMessageBox::Ok | QMessageBox::Cancel,
                                                               QMessageBox::Ok);
    if(btn == QMessageBox::Ok){
        msgLabel->setText("点击了ok按鈕");
    }else if(btn == QMessageBox::Cancel){
        msgLabel->setText("点击了cancel按鈕");
    }else msgLabel->setText("沒有点击按鈕");
}

void Message::getQue()
{
    msgLabel->setText("点击问题提示框");
    QMessageBox::StandardButton btn = QMessageBox::question(this,"问题提示","这是一条问题提示框。。。",
                                                               QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::Save);
    chageMsg(btn);
}

void Message::getWar()
{
    msgLabel->setText("点击警告提示框");
    QMessageBox::StandardButton btn = QMessageBox::warning(this,"问题提示","这是一条问题提示框。。。");
    chageMsg(btn);
}

void Message::getCriti()
{
    msgLabel->setText("点击错误提示框");
    QMessageBox::StandardButton btn = QMessageBox::critical(this,"错误提示","这是一条错误提示框。。。");
    chageMsg(btn);
}

void Message::getAbout()
{
    msgLabel->setText("点击帮助提示框");
    QMessageBox::about(this,"错误提示","这是一条帮助提示框。。。");
}

void Message::getAboutQt()
{
    msgLabel->setText("点击帮助提示框");
    QMessageBox::aboutQt(this,"Qt帮助提示");
}

void Message::chageMsg(QMessageBox::StandardButton but)
{
    switch (but) {
    case QMessageBox::Ok:
        msgLabel->setText("点击了ok按鈕");
        break;
    case QMessageBox::Cancel:
        msgLabel->setText("点击了cancel按鈕");
        break;
    case QMessageBox::Save:
        msgLabel->setText("点击了save按鈕");
        break;
    default:
        break;
    }
}

5.1 information

弹出消息提示框

//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示信息
//参数7:显示的按钮
//参数8:默认按钮
static int information(QWidget *parent, const QString &title,
                           const QString& text,
                           const QString& button0Text,
                           const QString& button1Text = QString(),
                           const QString& button2Text = QString(),
                           int defaultButtonNumber = 0,
                           int escapeButtonNumber = -1);

消息提示框

5.2 question

弹出询问提示框

//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示信息
//参数7:显示的按钮
//参数8:默认按钮
static int question(QWidget *parent, const QString &title,
                        const QString& text,
                        const QString& button0Text,
                        const QString& button1Text = QString(),
                        const QString& button2Text = QString(),
                        int defaultButtonNumber = 0,
                        int escapeButtonNumber = -1);

询问提示框

5.3 waming

弹出警告提示框

//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示内容
//参数4:提示按钮(OK)
//参数5:默认按钮
static StandardButton warning(QWidget *parent, const QString &title,
         const QString &text, StandardButtons buttons = Ok,
         StandardButton defaultButton = NoButton);

警告提示框

5.4 critical

弹出错误提示框

//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示内容
//参数4:提示按钮(OK)
//参数5:默认按钮
static StandardButton critical(QWidget *parent, const QString &title,
         const QString &text, StandardButtons buttons = Ok,
         StandardButton defaultButton = NoButton);

错误提示框

5.5 about

弹出帮助提示框

//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示内容
static void about(QWidget *parent, const QString &title, const QString &text);

帮助提示框

5.6 aboutQt

弹出QT帮助提示框
//参数1:提示框的父组件
//参数2:对话框的标题

static void aboutQt(QWidget *parent, const QString &title = QString());

QT帮助提示框

六、自定义消息对话框

QT支持自定义消息框。

在dialog.h中添加代码如下:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>
#include <QFrame>
#include "message.h"
#include "input.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

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

private slots:
    void loadFile();
    void loadColor();
    void loadTextStyle();
    void loadInput();
    void loadMsg();
    void loadMyMsg();
private:
    Ui::Dialog *ui;
    QPushButton *fileBtn;   //文件按鈕
    QLineEdit *fileUrl;     //存文件路勁
    QPushButton *colBtn;    //颜色按钮
    QFrame *color;          //填充颜色
    QPushButton *textBtn;   //字体按钮
    QLineEdit *textEdit;    //显示字体样式
    QPushButton *msgBtn;
    Message *msg;
    QPushButton *myMsg;     //自定義消息框
    QLabel *myMsgLabel;

    QGridLayout *myLayout;  //佈局

    QPushButton *inputBtn;
    Input *input;
};
#endif // DIALOG_H

在dialog.cpp中添加代码如下:

#include "dialog.h"
#include "ui_dialog.h"

#include <QFileDialog>
#include <QDebug>
#include <QColorDialog>
#include <QColor>
#include <QFontDialog>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    fileBtn = new QPushButton("點擊選擇文件");
    fileUrl = new QLineEdit;

    myLayout = new QGridLayout(this);
    myLayout->addWidget(fileBtn,0,0);
    myLayout->addWidget(fileUrl,0,1);

    connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);

    //颜色对话框
    colBtn = new QPushButton("点击选择颜色");
    color = new QFrame;
    color->setFrameStyle(QFrame::Box);  //设置为盒子风格
    color->setAutoFillBackground(true); //设置可进行颜色填充

    myLayout->addWidget(colBtn,1,0);
    myLayout->addWidget(color,1,1);
    connect(colBtn,&QPushButton::clicked,this,&Dialog::loadColor);

    //字体对话框
    textBtn = new QPushButton("点击选择字体样式");
    textEdit = new QLineEdit("用来测试的文字");

    myLayout->addWidget(textBtn,2,0);
    myLayout->addWidget(textEdit,2,1);
    connect(textBtn,&QPushButton::clicked,this,&Dialog::loadTextStyle);

    //输入对话框
    inputBtn = new QPushButton("点击进行输入");
    myLayout->addWidget(inputBtn,3,0,1,2);
    connect(inputBtn,&QPushButton::clicked,this,&Dialog::loadInput);

    //消息对话框
    msgBtn = new QPushButton("点击查看信息框");
    myLayout->addWidget(msgBtn,4,0,1,2);

    connect(msgBtn,&QPushButton::clicked,this,&Dialog::loadMsg);

    myMsgLabel = new QLabel("显示自定义信息历程");
    myMsg = new QPushButton("自定义消息");
    myLayout->addWidget(myMsgLabel,5,0,1,2);
    myLayout->addWidget(myMsg,6,0,1,2);
    connect(myMsg,&QPushButton::clicked,this,&Dialog::loadMyMsg);
}

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

void Dialog::loadFile()
{
//    QString path =  QFileDialog::getOpenFileName(this,"標準對話框",".","c++(*.cpp);;c file(*.c);;header(*.h)");
//    QStringList strList = QFileDialog::getOpenFileNames(this,"選擇多個文件",".","c++(*.cpp);;c file(*.c);;header(*.h)");
//    QString path = QFileDialog::getSaveFileName(this,"保存文件",".","c++(*.cpp);;c file(*.c);;header(*.h)");
//    QString path = QFileDialog::getExistingDirectory(this,"打開已有的目錄",".");
      QUrl url = QFileDialog::getOpenFileUrl(this,"保存文件",QUrl(""),"c++(*.cpp);;c file(*.c);;header(*.h)");


//    QString path;
//    foreach(QString str,strList){
//        path += str;
//        fileUrl->setText(path);
//    }
//    fileUrl->setText(path);
      qDebug() << url;

}

void Dialog::loadColor()
{
    QColor col = QColorDialog::getColor(Qt::yellow,this,"颜色");
    color->setPalette(QPalette(col));
}

void Dialog::loadTextStyle()
{
    bool ok;
    QFont font = QFontDialog::getFont(&ok,this);
    if(ok){
        textEdit->setFont(font);
    }
}

void Dialog::loadInput()
{
    input = new Input(this);
    input->show();
}

void Dialog::loadMsg()
{
    msg = new Message(this);
    msg->show();
}

void Dialog::loadMyMsg()
{
    myMsgLabel->setText("点击自定义消息按钮");
    QMessageBox myMsgBox;
    myMsgBox.setWindowTitle("自定义的消息提示框");   //设置窗口标题

    //添加自定义的按钮
    QPushButton *ok = myMsgBox.addButton("彳亍",QMessageBox::ActionRole);
    QPushButton *no = myMsgBox.addButton("不行",QMessageBox::ActionRole);
    QPushButton *cancel = myMsgBox.addButton(QMessageBox::Cancel);

    myMsgBox.setIconPixmap(QPixmap("chayao.jpg"));
    myMsgBox.exec();    //启用自定义按钮

    if(myMsgBox.clickedButton() == ok){
        myMsgLabel->setText("点击了彳亍");
    }else if(myMsgBox.clickedButton() == no){ myMsgLabel->setText("点击了不行"); }
    else if(myMsgBox.clickedButton() == cancel){ myMsgLabel->setText("点击了cancel"); }
    else myMsgLabel->setText("沒有点击按鈕");
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值