Qt5——基本对话框(1)


Qt中的各种对话框应用

通过一个实例来介绍Qt5中对于各类对话框的应用。这个实例中具有以下这几种QT的标准对话框:

  • 标准文件对话框(QFileDialog)
  • 标准颜色对话框(QColorDialog)
  • 标准字体对话框(QFontDialog)
  • 标准输入对话框(QInputDialog)
  • 标准消息对话框(QMessageDialog)

各种基本对话框都是通过调用各自不同的静态函数来完成其功能。具体如下:

相关类类说明静态函数函数说明
QFileDialog类标准文件对话框getOpenFileName获得用户选择的文件名
getSaveFileName获得用户保存的文件名
getExistingDirectory获得用户选择的已存在的目录名
getOpenFileNames获得用户选择的文件名列表
QColorDialog类标准颜色对话框getColor获得用户选择的颜色值
QFontDialog类标准字体对话框getFont获得用户选择的字体
QInputDialog类标准输入对话框getText标准字符串输入对话框
getItem下拉表条目输入框
getIntint类型数据输入对话框
getDoubledouble类型数据输入对话框
QMessageBox类消息对话框QMessageBox::questionquestion消息框
QMessageBox::informationinformation消息框
QMessageBox::warningwarning消息框
QMessageBox::criticalcritical消息框
QMessageBox::aboutabout消息框
QMessageBox::aboutQtabout Qt消息框

各个静态函数详细说明

  • 标准文件对话框QFileDialog::getOpenFileName()
    static QString getOpenFileName(QWidget *parent = nullptr,	//标准文件对话框的父窗口
                                   const QString &caption = QString(),	//标准文件对话框的标题名
                                   const QString &dir = QString(),	//指定默认目录
                                   const QString &filter = QString(),//制定对文件类型的过滤
                                   QString *selectedFilter = nullptr,//用户选择的过滤器通过此函数返回
                                   Options options = Options());//选择显示文件名的个数,默认是同时是目录与文件名

void Dialog::showFile()
{
    //设置标准文件对话框
    QString s = QFileDialog::getOpenFileName(this, "open file dialog", "/", "C++ files(*.cpp);;C files(*.c);;Head files(*.h)");
    fileLineEdit->setText(s);
}

在这里插入图片描述

  • 标准颜色对话框QColor::getColor()
    static QColor getColor(const QColor &initial = Qt::white,	//默认选中的颜色
                           QWidget *parent = nullptr,	//对话框的父窗口
                           const QString &title = QString(),	//对话框的标题名
                           ColorDialogOptions options = ColorDialogOptions());

void Dialog::showColor()
{
    //设置标准颜色对话框
    QColor c = QColorDialog::getColor(Qt::blue);
    if(c.isValid())
    {
        colorFrame->setPalette(QPalette(c));
    }
}

在这里插入图片描述

  • 标准字体对话框QFontDialog::getFont()
    static QFont getFont(bool *ok, //若用户选择“ok”则该参数为true,函数返回所选择的字体。否则设为false,返回默认字体。
    					QWidget *parent = nullptr);//父窗口

void Dialog::showFont()
{
    //设置标准字体对话框
    bool ok;
    QFont f = QFontDialog::getFont(&ok);
    if(ok)
    {
        fontLineEdit->setFont(f);
    }
}

在这里插入图片描述

  • 标准输入对话框类:标准字符串输入对话框QInputDialog::getText()
    static QString getText(QWidget *parent, //父窗口
    						const QString &title, //标题名
    						const QString &label,//标签提示
                           QLineEdit::EchoMode echo = QLineEdit::Normal,//指定输入对话框中的QLineEdit控件输入模式
                           const QString &text = QString(), //制定QLineEdit控件出现的文字
                           bool *ok = nullptr,//用户选中“ok”则返回true,否则为false
                           Qt::WindowFlags flags = Qt::WindowFlags(),
                           Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

void InputDlg::ChangeName()
{
    //标准字符串输入对话框
    bool ok;
    QString text = QInputDialog::getText(this, tr("标准字符串输入对话框"), tr("请输入姓名:"), QLineEdit::Normal, nameLabel2->text(), &ok);
    if(ok && !text.isEmpty())
    {
        nameLabel2->setText(text);
    }

}

在这里插入图片描述

  • 标准输入对话框类:标准条目选择对话框QInputDialog::getItem()
    static QString getItem(QWidget *parent, //父窗口
    						const QString &title, //对话框标题名
    						const QString &label,//标签提示
                           const QStringList &items, //指定控件显示的可选条目为一个QStringList对象
                           int current = 0, //对话框弹出时默认显示的条目序号。
                           bool editable = true,//指定控件中显示的文字是否可编辑
                           bool *ok = nullptr, //提示按钮触发,如果是ok按钮则为true,否则为false。
                           Qt::WindowFlags flags = Qt::WindowFlags(),//指明窗口标识。
                           Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

void InputDlg::ChangeSex()
{
    //标准条目选择对话框
    QStringList SexItems;
    SexItems << tr("男") << tr("女");
    bool ok;
    QString SexItem = QInputDialog::getItem(this, tr("标准条目选择对话框"), tr("请选择性别:"), SexItems, 0, false, &ok);
    if(ok && !SexItem.isEmpty())
    {
        sexLabel2->setText(SexItem);
    }
}

在这里插入图片描述

  • 标准输入对话框类:标准int类型输入对话框QInputDialog::getInt()
    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());

void InputDlg::ChangeAge()
{
    //标准int类型输入对话框
    bool ok;
    int age = QInputDialog::getInt(this, tr("标准int类型输入对话框"), tr("请输入年龄:"), ageLabel2->text().toInt(&ok), 0, 100, 1, &ok);
    if(ok)
    {
        ageLabel2->setText(QString(tr("%1")).arg(age));
    }
}

在这里插入图片描述

  • 标准输入对话框类:标准double类型输入对话框QInputDialog::getDouble()
    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());
                            
void InputDlg::ChangeScore()
{
    //标准double类型输入对话框
    bool ok;
    double score = QInputDialog::getDouble(this, tr("标准double类型输入对话框"), tr("请输入成绩:"), scoreLabel2->text().toDouble(&ok), 0, 100, 1, &ok);
    if(ok)
    {
        scoreLabel2->setText(QString(tr("%1")).arg(score));
    }
}

在这里插入图片描述

  • 消息对话框:question消息框QMessageBox::question()
    static int question(QWidget *parent, 
    					const QString &title,
                        const QString& text,
                        int button0, 
                        int button1 = 0, 
                        int button2 = 0);

void MsgBoxDlg::showQuestionMsg()
{
    //question消息对话框
    label->setText(tr("question message box"));
    switch (QMessageBox::question(this, tr("question消息框"), tr("您现在已经修改完成,是否结束程序"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok)) {
    case QMessageBox::Ok:
        label->setText("Question button/OK");
        break;
    case QMessageBox::Cancel:
        label->setText("Question button/Cancel");
        break;
    default:
        break;
    }
    return ;
}

在这里插入图片描述

  • 消息对话框:information消息框QMessageBox::information()
    static int information(QWidget *parent, 
    						const QString &title,
                           const QString& text,
                           int button0, 
                           int button1 = 0, 
                           int button2 = 0);

void MsgBoxDlg::showInformationMsg()
{
    //information消息框
    label->setText(tr("Information Message Box"));
    QMessageBox::information(this, tr("information消息框"), tr("这个information消息框测试,欢迎您!"));
    return ;
}

在这里插入图片描述

  • 消息对话框:warning消息框QMessageBox::warning()
    static int warning(QWidget *parent, 
    					const QString &title,
                       const QString& text,
                       int button0, 
                       int button1, 
                       int button2 = 0);

void MsgBoxDlg::showWarningMsg()
{
    //warning消息框
    label->setText(tr("warning message box"));
    switch (QMessageBox::warning(this, tr("warning消息框"), tr("您修改的内容还未保存,是否要保存对文档的修改?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save)) {
    case QMessageBox::Save:
        label->setText("Warning button/Save");
        break;
    case QMessageBox::Discard:
        label->setText("Warning button/Discard");
        break;
    case QMessageBox::Cancel:
        label->setText("Warning button/Cancel");
        break;
    default:
        break;
    }
    return ;
}

在这里插入图片描述

  • 消息对话框:critical消息框QMessageBox::critical()
    static int critical(QWidget *parent, 
    					const QString &title,
                        const QString& text,
                        int button0, 
                        int button1, 
                        int button2 = 0);


void MsgBoxDlg::showCriticalMsg()
{
    //critical消息框
    label->setText(tr("critical message box"));
    QMessageBox::critical(this, tr("critical消息框"), tr("这是一个critical消息框测试!"));
    return ;
}

在这里插入图片描述

  • 消息对话框:about消息框QMessageBox::about()
    static void about(QWidget *parent, //父窗口
    					const QString &title, //对话框标题
    					const QString &text);//标签提示字符串

void MsgBoxDlg::showAboutMsg()
{
    //about消息框
    label->setText(tr("about message box"));
    QMessageBox::about(this, tr("about消息框"), tr("这是一个about消息框测试!"));
    return ;
}

在这里插入图片描述

  • 消息对话框:aboutQt消息框QMessageBox::aboutQt()
    static void aboutQt(QWidget *parent, 
    					const QString &title = QString());

void MsgBoxDlg::showAboutQtMsg()
{
    //about Qt消息框
    label->setText(tr("about message box"));
    QMessageBox::aboutQt(this, tr("about Qt消息框"));
    return ;
}

在这里插入图片描述

实例实现

新建Qt项目“DialogExample”,基类选择“QDialog”,类名不变,取消“创建界面”复选框。

  • dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QFileDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QMessageBox>

#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>
#include <QFrame>
#include "inputdlg.h"
#include "msgboxdlg.h"


class Dialog : public QDialog
{
    Q_OBJECT

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

private slots:
    //标准文件对话框槽函数
    void showFile();
    //标准颜色对话框槽函数
    void showColor();
    //标准字体对话框槽函数
    void showFont();
    //标准输入对话框槽函数
    void showInputDlg();
    //各种消息对话框槽函数
    void showMsgDlg();
    //自定义消息对话框槽函数
    void showCustomDlg();

private:
    //主体布局
    QGridLayout *mainLayout;

    //标准文件对话框
    QPushButton *fileBtn;
    QLineEdit *fileLineEdit;

    //标准颜色对话框
    QPushButton *colorBtn;
    QFrame *colorFrame;

    //标准字体对话框
    QPushButton *fontBtn;
    QLineEdit *fontLineEdit;

    //标准输入对话框
    InputDlg *inputDlg;
    QPushButton *inputBtn;

    //各种消息对话框
    QPushButton *MsgBtn;
    MsgBoxDlg *msgDlg;

    //自定义消息框
    QPushButton *CustomBtn;
    QLabel *label;


};
#endif // DIALOG_H

  • dialog.cpp
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    //设置窗口标题
    setWindowTitle(tr("各种标准对话框实例"));

    //标准文件对话框
    fileBtn = new QPushButton(tr("文件标准对话框实例"));
    fileLineEdit = new QLineEdit;

    //标准延时对话框
    colorBtn = new QPushButton(tr("标准颜色对话框实例"));
    colorFrame = new QFrame;
    colorFrame->setFrameShape(QFrame::Box);
    //改变背景颜色
    colorFrame->setAutoFillBackground(true);

    //标准字体对话框
    fontBtn = new QPushButton(tr("标准字体对话框实例"));
    fontLineEdit = new QLineEdit;
    fontLineEdit->setText(tr("Welcome!"));

    //标准输入对话框
    inputBtn = new QPushButton(tr("标准输入对话框实例"));

    //各种消息对话框
    MsgBtn = new QPushButton(tr("标准消息对话框实例"));

    //自定义消息对话框
    CustomBtn = new QPushButton(tr("自定义消息对话框实例"));
    label = new QLabel;
    label->setFrameStyle(QFrame::Panel | QFrame::Sunken);

    //主体布局
    mainLayout = new QGridLayout(this);
    mainLayout->addWidget(fileBtn, 0, 0);
    mainLayout->addWidget(fileLineEdit, 0, 1);

    mainLayout->addWidget(colorBtn, 1, 0);
    mainLayout->addWidget(colorFrame, 1, 1);

    mainLayout->addWidget(fontBtn, 2, 0);
    mainLayout->addWidget(fontLineEdit, 2, 1);

    mainLayout->addWidget(inputBtn, 3, 0);
    mainLayout->addWidget(MsgBtn, 3, 1);

    mainLayout->addWidget(CustomBtn, 4, 0);
    mainLayout->addWidget(label, 4, 1);


    //实现槽函数链接
    connect(fileBtn, SIGNAL(clicked()), this, SLOT(showFile()));
    connect(colorBtn, SIGNAL(clicked()), this, SLOT(showColor()));
    connect(fontBtn, SIGNAL(clicked()), this, SLOT(showFont()));
    connect(inputBtn, SIGNAL(clicked()), this, SLOT(showInputDlg()));
    connect(MsgBtn, SIGNAL(clicked()), this, SLOT(showMsgDlg()));
    connect(CustomBtn, SIGNAL(clicked()), this, SLOT(showCustomDlg()));

}

Dialog::~Dialog()
{
}

void Dialog::showFile()
{
    //设置标准文件对话框
    QString s = QFileDialog::getOpenFileName(this, "open file dialog", "/", "C++ files(*.cpp);;C files(*.c);;Head files(*.h)");
    fileLineEdit->setText(s);
}

void Dialog::showColor()
{
    //设置标准颜色对话框
    QColor c = QColorDialog::getColor(Qt::blue);
    if(c.isValid())
    {
        colorFrame->setPalette(QPalette(c));
    }
}

void Dialog::showFont()
{
    //设置标准字体对话框
    bool ok;
    QFont f = QFontDialog::getFont(&ok);
    if(ok)
    {
        fontLineEdit->setFont(f);
    }
}

void Dialog::showInputDlg()
{
    inputDlg = new InputDlg(this);
    inputDlg->show();
}

void Dialog::showMsgDlg()
{
    msgDlg = new MsgBoxDlg(this);
    msgDlg->show();
}

void Dialog::showCustomDlg()
{
    label->setText(tr("Custom Message Box"));
    QMessageBox customMsgBox;
    customMsgBox.setWindowTitle(tr("用户自定义消息对话框"));
    QPushButton *yesBtn = customMsgBox.addButton(tr("Yes"), QMessageBox::ActionRole);
    QPushButton *noBtn = customMsgBox.addButton(tr("No"), QMessageBox::ActionRole);
    QPushButton *cancelBtn = customMsgBox.addButton(tr("Cancel"), QMessageBox::ActionRole);

    customMsgBox.setText(tr("这是一个用户自定义消息对话框!"));
    customMsgBox.setIconPixmap(QPixmap("Qt.png"));
    customMsgBox.exec();

    if(customMsgBox.clickedButton() == yesBtn)
        label->setText(tr("Custom message Box/yes"));
    if(customMsgBox.clickedButton() == noBtn)
        label->setText(tr("Custom message Box/no"));
    if(customMsgBox.clickedButton() == cancelBtn)
        label->setText(tr("Custom message Box/cancel"));
    return ;
}

  • 添加标准输入对话框的各项实例,添加新文件->C++类,命令为InpuDlg,继承自QDialog类,具体代码如下:
  • inputdlg.h
#ifndef INPUTDLG_H
#define INPUTDLG_H

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

class InputDlg : public QDialog
{
    Q_OBJECT
public:
    InputDlg(QWidget *parent = 0);

private slots:
    void ChangeName();
    void ChangeSex();
    void ChangeAge();
    void ChangeScore();
private:
    QLabel *nameLabel1;
    QLabel *sexLabel1;
    QLabel *ageLabel1;
    QLabel *scoreLabel1;
    QLabel *nameLabel2;
    QLabel *sexLabel2;
    QLabel *ageLabel2;
    QLabel *scoreLabel2;
    QPushButton *nameBtn;
    QPushButton *sexBtn;
    QPushButton *ageBtn;
    QPushButton *scoreBtn;
    QGridLayout *mainLayout;
};

#endif // INPUTDLG_H

  • inputdlg.cpp
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    //设置窗口标题
    setWindowTitle(tr("各种标准对话框实例"));

    //标准文件对话框
    fileBtn = new QPushButton(tr("文件标准对话框实例"));
    fileLineEdit = new QLineEdit;

    //标准延时对话框
    colorBtn = new QPushButton(tr("标准颜色对话框实例"));
    colorFrame = new QFrame;
    colorFrame->setFrameShape(QFrame::Box);
    //改变背景颜色
    colorFrame->setAutoFillBackground(true);

    //标准字体对话框
    fontBtn = new QPushButton(tr("标准字体对话框实例"));
    fontLineEdit = new QLineEdit;
    fontLineEdit->setText(tr("Welcome!"));

    //标准输入对话框
    inputBtn = new QPushButton(tr("标准输入对话框实例"));

    //各种消息对话框
    MsgBtn = new QPushButton(tr("标准消息对话框实例"));

    //自定义消息对话框
    CustomBtn = new QPushButton(tr("自定义消息对话框实例"));
    label = new QLabel;
    label->setFrameStyle(QFrame::Panel | QFrame::Sunken);

    //主体布局
    mainLayout = new QGridLayout(this);
    mainLayout->addWidget(fileBtn, 0, 0);
    mainLayout->addWidget(fileLineEdit, 0, 1);

    mainLayout->addWidget(colorBtn, 1, 0);
    mainLayout->addWidget(colorFrame, 1, 1);

    mainLayout->addWidget(fontBtn, 2, 0);
    mainLayout->addWidget(fontLineEdit, 2, 1);

    mainLayout->addWidget(inputBtn, 3, 0);
    mainLayout->addWidget(MsgBtn, 3, 1);

    mainLayout->addWidget(CustomBtn, 4, 0);
    mainLayout->addWidget(label, 4, 1);


    //实现槽函数链接
    connect(fileBtn, SIGNAL(clicked()), this, SLOT(showFile()));
    connect(colorBtn, SIGNAL(clicked()), this, SLOT(showColor()));
    connect(fontBtn, SIGNAL(clicked()), this, SLOT(showFont()));
    connect(inputBtn, SIGNAL(clicked()), this, SLOT(showInputDlg()));
    connect(MsgBtn, SIGNAL(clicked()), this, SLOT(showMsgDlg()));
    connect(CustomBtn, SIGNAL(clicked()), this, SLOT(showCustomDlg()));

}

Dialog::~Dialog()
{
}

void Dialog::showFile()
{
    //设置标准文件对话框
    QString s = QFileDialog::getOpenFileName(this, "open file dialog", "/", "C++ files(*.cpp);;C files(*.c);;Head files(*.h)");
    fileLineEdit->setText(s);
}

void Dialog::showColor()
{
    //设置标准颜色对话框
    QColor c = QColorDialog::getColor(Qt::blue);
    if(c.isValid())
    {
        colorFrame->setPalette(QPalette(c));
    }
}

void Dialog::showFont()
{
    //设置标准字体对话框
    bool ok;
    QFont f = QFontDialog::getFont(&ok);
    if(ok)
    {
        fontLineEdit->setFont(f);
    }
}

void Dialog::showInputDlg()
{
    inputDlg = new InputDlg(this);
    inputDlg->show();
}

void Dialog::showMsgDlg()
{
    msgDlg = new MsgBoxDlg(this);
    msgDlg->show();
}

void Dialog::showCustomDlg()
{
    label->setText(tr("Custom Message Box"));
    QMessageBox customMsgBox;
    customMsgBox.setWindowTitle(tr("用户自定义消息对话框"));
    QPushButton *yesBtn = customMsgBox.addButton(tr("Yes"), QMessageBox::ActionRole);
    QPushButton *noBtn = customMsgBox.addButton(tr("No"), QMessageBox::ActionRole);
    QPushButton *cancelBtn = customMsgBox.addButton(tr("Cancel"), QMessageBox::ActionRole);

    customMsgBox.setText(tr("这是一个用户自定义消息对话框!"));
    customMsgBox.setIconPixmap(QPixmap("Qt.png"));
    customMsgBox.exec();

    if(customMsgBox.clickedButton() == yesBtn)
        label->setText(tr("Custom message Box/yes"));
    if(customMsgBox.clickedButton() == noBtn)
        label->setText(tr("Custom message Box/no"));
    if(customMsgBox.clickedButton() == cancelBtn)
        label->setText(tr("Custom message Box/cancel"));
    return ;
}

  • 最后添加消息对话框类的各项示例,添加新文件->选择C++类->命令为MsgBoxDlg,同样选择继承自QDialog,具体代码如下:
  • msgboxdlg.h
#ifndef MSGBOXDLG_H
#define MSGBOXDLG_H

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


class MsgBoxDlg : public QDialog
{
    Q_OBJECT
public:
    MsgBoxDlg(QWidget *parent = 0);

private slots:
    void showQuestionMsg();
    void showInformationMsg();
    void showWarningMsg();
    void showCriticalMsg();
    void showAboutMsg();
    void showAboutQtMsg();

private:
    QLabel *label;
    QPushButton *questionBtn;
    QPushButton *informationBtn;
    QPushButton *warningBtn;
    QPushButton *criticalBtn;
    QPushButton *aboutBtn;
    QPushButton *aboutQtBtn;
    QGridLayout *mainLayout;

};

#endif // MSGBOXDLG_H

  • msgboxdlg.cpp
#include "msgboxdlg.h"

MsgBoxDlg::MsgBoxDlg(QWidget *parent)
{
    setWindowTitle(tr("标准对话框实例"));
    label = new QLabel(tr("请选择一种消息框"));
    questionBtn = new QPushButton(tr("QusetionMsg"));
    informationBtn = new QPushButton(tr("InformationMsg"));
    warningBtn = new QPushButton(tr("warningMsg"));
    criticalBtn = new QPushButton(tr("criticalMsg"));
    aboutBtn = new QPushButton(tr("aboutMsg"));
    aboutQtBtn = new QPushButton(tr("aboutQtMsg"));

    mainLayout = new QGridLayout(this);
    mainLayout->addWidget(label, 0, 0, 1, 2);
    mainLayout->addWidget(questionBtn, 1, 0);
    mainLayout->addWidget(informationBtn, 1, 1);
    mainLayout->addWidget(warningBtn, 2, 0);
    mainLayout->addWidget(criticalBtn, 2, 1);
    mainLayout->addWidget(aboutBtn, 3, 0);
    mainLayout->addWidget(aboutQtBtn, 3, 1);

    connect(questionBtn, SIGNAL(clicked()), this , SLOT(showQuestionMsg()));
    connect(informationBtn, SIGNAL(clicked()), this , SLOT(showInformationMsg()));
    connect(warningBtn, SIGNAL(clicked()), this , SLOT(showWarningMsg()));
    connect(criticalBtn, SIGNAL(clicked()), this , SLOT(showCriticalMsg()));
    connect(aboutBtn, SIGNAL(clicked()), this , SLOT(showAboutMsg()));
    connect(aboutQtBtn, SIGNAL(clicked()), this , SLOT(showAboutQtMsg()));

}

void MsgBoxDlg::showQuestionMsg()
{
    //question消息对话框
    label->setText(tr("question message box"));
    switch (QMessageBox::question(this, tr("question消息框"), tr("您现在已经修改完成,是否结束程序"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok)) {
    case QMessageBox::Ok:
        label->setText("Question button/OK");
        break;
    case QMessageBox::Cancel:
        label->setText("Question button/Cancel");
        break;
    default:
        break;
    }
    return ;
}

void MsgBoxDlg::showInformationMsg()
{
    //information消息框
    label->setText(tr("Information Message Box"));
    QMessageBox::information(this, tr("information消息框"), tr("这个information消息框测试,欢迎您!"));
    return ;
}

void MsgBoxDlg::showWarningMsg()
{
    //warning消息框
    label->setText(tr("warning message box"));
    switch (QMessageBox::warning(this, tr("warning消息框"), tr("您修改的内容还未保存,是否要保存对文档的修改?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save)) {
    case QMessageBox::Save:
        label->setText("Warning button/Save");
        break;
    case QMessageBox::Discard:
        label->setText("Warning button/Discard");
        break;
    case QMessageBox::Cancel:
        label->setText("Warning button/Cancel");
        break;
    default:
        break;
    }
    return ;
}

void MsgBoxDlg::showCriticalMsg()
{
    //critical消息框
    label->setText(tr("critical message box"));
    QMessageBox::critical(this, tr("critical消息框"), tr("这是一个critical消息框测试!"));
    return ;
}

void MsgBoxDlg::showAboutMsg()
{
    //about消息框
    label->setText(tr("about message box"));
    QMessageBox::about(this, tr("about消息框"), tr("这是一个about消息框测试!"));
    return ;
}

void MsgBoxDlg::showAboutQtMsg()
{
    //about Qt消息框
    label->setText(tr("about message box"));
    QMessageBox::aboutQt(this, tr("about Qt消息框"));
    return ;
}

  • 最终实现:
    主界面
    在这里插入图片描述
    标准输入对话框界面
    在这里插入图片描述标准消息对话框界面
    在这里插入图片描述自定义消息对话框
    在这里插入图片描述

工具盒类

工具盒类又称为QToolBox,QToolBox提供了一种列状的层叠窗体,并且提供了一种快速访问命令或选择项的按钮,通常在工具条中使用。
抽屉效果是软件界面设计中的一种常用形式,可以以一种动态直观的方式在大小有限的界面上扩展出更多的功能。

示例“qq界面实例”

通过实现类似QQ抽屉效果的实例来介绍QToolBox类的使用。

实现步骤

  • 新建Qt widget application,项目名称为“MyQQExample”,基类选择“QDialog”,取消“创建界面”复选框选择。
  • 在项目上点右键添加新文件,选择“C++Class”选项,基类选择‘QToolBox’,输入类名称为“Drawer”。
  • 在drawer.h中添加以下代码
#ifndef DRAWER_H
#define DRAWER_H

#include <QObject>
#include <QToolBox>
#include <QToolButton>
#include <QGroupBox>
#include <QVBoxLayout>

class Drawer : public QToolBox
{
public:
    Drawer(QWidget *parent = 0, Qt::WindowFlags f = 0);

private:
    QToolButton *toolBtn1_1;
    QToolButton *toolBtn1_2;
    QToolButton *toolBtn1_3;
    QToolButton *toolBtn1_4;
    QToolButton *toolBtn1_5;

    QToolButton *toolBtn2_1;
    QToolButton *toolBtn2_2;

    QToolButton *toolBtn3_1;
    QToolButton *toolBtn3_2;

};

#endif // DRAWER_H

  • 在drawer.cpp中添加以下代码
#include "drawer.h"

Drawer::Drawer(QWidget *parent, Qt::WindowFlags f)
{
    //设置主窗口标题
    setWindowTitle(tr("My QQ"));

    toolBtn1_1 = new QToolButton;
    toolBtn1_1->setText(tr("张三"));
    toolBtn1_1->setIcon(QPixmap("11.png"));
    toolBtn1_1->setIconSize(QPixmap("11.png").size());
    toolBtn1_1->setAutoRaise(true);
    toolBtn1_1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn1_2 = new QToolButton;
    toolBtn1_2->setText(tr("李四"));
    toolBtn1_2->setIcon(QPixmap("12.png"));
    toolBtn1_2->setIconSize(QPixmap("12.png").size());
    toolBtn1_2->setAutoRaise(true);
    toolBtn1_2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn1_3 = new QToolButton;
    toolBtn1_3->setText(tr("王五"));
    toolBtn1_3->setIcon(QPixmap("13.png"));
    toolBtn1_3->setIconSize(QPixmap("13.png").size());
    toolBtn1_3->setAutoRaise(true);
    toolBtn1_3->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn1_4 = new QToolButton;
    toolBtn1_4->setText(tr("小孙"));
    toolBtn1_4->setIcon(QPixmap("14.png"));
    toolBtn1_4->setIconSize(QPixmap("14.png").size());
    toolBtn1_4->setAutoRaise(true);
    toolBtn1_4->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn1_5 = new QToolButton;
    toolBtn1_5->setText(tr("小赵"));
    toolBtn1_5->setIcon(QPixmap("15.png"));
    toolBtn1_5->setIconSize(QPixmap("15.png").size());
    toolBtn1_5->setAutoRaise(true);
    toolBtn1_5->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    QGroupBox *groupBox1 = new QGroupBox;
    QVBoxLayout *layout1 = new QVBoxLayout(groupBox1);

    //布局中各窗体的显示间距
    layout1->setMargin(10);
    //布局中各窗体的显示位置,居中
    layout1->setAlignment(Qt::AlignCenter);
    //插入各个按钮
    layout1->addWidget(toolBtn1_1);
    layout1->addWidget(toolBtn1_2);
    layout1->addWidget(toolBtn1_3);
    layout1->addWidget(toolBtn1_4);
    layout1->addWidget(toolBtn1_5);

    //插入一个占位符
    layout1->addStretch();

    toolBtn2_1 = new QToolButton;
    toolBtn2_1->setText(tr("小王"));
    toolBtn2_1->setIcon(QPixmap("21.png"));
    toolBtn2_1->setIconSize(QPixmap("21.png").size());
    toolBtn2_1->setAutoRaise(true);
    toolBtn2_1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn2_2 = new QToolButton;
    toolBtn2_2->setText(tr("小张"));
    toolBtn2_2->setIcon(QPixmap("22.png"));
    toolBtn2_2->setIconSize(QPixmap("22.png").size());
    toolBtn2_2->setAutoRaise(true);
    toolBtn2_2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    QGroupBox *groupBox2 = new QGroupBox;
    QVBoxLayout *layout2 = new QVBoxLayout(groupBox2);
    layout2->setMargin(10);
    layout2->setAlignment(Qt::AlignCenter);
    layout2->addWidget(toolBtn2_1);
    layout2->addWidget(toolBtn2_2);

    toolBtn3_1 = new QToolButton;
    toolBtn3_1->setText(tr("小陈"));
    toolBtn3_1->setIcon(QPixmap("31.png"));
    toolBtn3_1->setIconSize(QPixmap("31.png").size());
    toolBtn3_1->setAutoRaise(true);
    toolBtn3_1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn3_1 = new QToolButton;
    toolBtn3_1->setText(tr("小李"));
    toolBtn3_1->setIcon(QPixmap("32.png"));
    toolBtn3_1->setIconSize(QPixmap("32.png").size());
    toolBtn3_1->setAutoRaise(true);
    toolBtn3_1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    QGroupBox *groupBox3 = new QGroupBox;
    QVBoxLayout *layout3 = new QVBoxLayout(groupBox3);
    layout3->setMargin(10);
    layout3->setAlignment(Qt::AlignCenter);
    layout3->addWidget(toolBtn3_1);
    layout3->addWidget(toolBtn3_2);

    //将准备好的抽屉插入Toolbox中
    this->addItem((QWidget *)groupBox1, tr("我的好友"));
    this->addItem((QWidget *)groupBox2, tr("陌生人"));
    this->addItem((QWidget *)groupBox3, tr("黑名单"));

}

  • 修改dialog.cpp中代码
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    drawer = new Drawer(this);
    drawer->show();
}

Dialog::~Dialog()
{
}


  • dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include "drawer.h"
class Dialog : public QDialog
{
    Q_OBJECT

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

    Drawer *drawer;
};
#endif // DIALOG_H

界面效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值