Qt5开发学习之Qt基本对话框(四)

基本对话框包括标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)、消息对话框(QMessageBox)。

各种基本对话框由各自的静态函数来完成其功能:
QDialog函数
下面的实例,将各种对话框集合成一个项目进行试验。首先创建一个GUI项目,基类选择QDialog;然后在头文件包含<QTextCodec>;在main.cpp添加如下代码以便显示中文:QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
Dialog类用于显示整体的对话框,其中提供五个标准对话框功能
头文件 dialog.h

#include <QDialog>
#include <QString>
#include <QTextCodec>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>

#include <QFileDialog>
#include <QColorDialog>
#include <QFontDialog>

#include "inputdlg.h"
#include "msgboxdlg.h"

class Dialog : public QDialog
{
    Q_OBJECT

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

private:
    // 标准文件对话框
    QPushButton *fileButton;
    QLineEdit *fileEdit;

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

    // 标准字体对话框
    QPushButton *fontButton;
    QLineEdit *fontEdit;

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

    // 消息对话框
    QPushButton *msgButton;
    MsgBoxDlg *msgDlg;

private slots:
    // 文件对话框槽函数
    void showFileDialog();

    // 标准颜色对话框槽函数
    void showColorDialog();

    // 标准字体对话框槽函数
    void showFontDialog();

    // 弹出标准输入框的槽函数
    void showInputDialog();

    // 弹出消息对话框
    void showMsgDlg();
};

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("对话框实例"));
    this->resize(400, 400);
    QGridLayout *mainLayout = new QGridLayout(this);

    // 标准文件对话框控件、槽函数
    fileButton = new QPushButton(tr("标准文件对话框"));
    fileEdit = new QLineEdit;
    mainLayout->addWidget(fileButton, 0, 0);
    mainLayout->addWidget(fileEdit, 0, 1);
    connect(fileButton, &QPushButton::clicked, this, &Dialog::showFileDialog);

    // 标准颜色对话框控件、槽函数
    colorButton = new QPushButton(tr("标准颜色对话框"));
    // QFrame用于根据用户选择的不同的颜色更新的不同的背景
    colorFrame = new QFrame;
    colorFrame->setFrameShape(QFrame::Box);
    colorFrame->setAutoFillBackground(true);
    mainLayout->addWidget(colorButton, 1, 0);
    mainLayout->addWidget(colorFrame, 1, 1);
    connect(colorButton, &QPushButton::clicked, this, &Dialog::showColorDialog);

    // 标准字体对话框控件、槽函数
    fontButton = new QPushButton(tr("标准字体对话框"));
    fontEdit = new QLineEdit;
    fontEdit->setText(tr("Hello shige"));
    mainLayout->addWidget(fontButton, 2, 0);
    mainLayout->addWidget(fontEdit, 2, 1);
    connect(fontButton, &QPushButton::clicked, this, &Dialog::showFontDialog);

    // 标准输入框控件、槽函数
    inputButton = new QPushButton(tr("标准输入对话框"));
    mainLayout->addWidget(inputButton, 3, 0);
    connect(inputButton, &QPushButton::clicked, this, &Dialog::showInputDialog);

    // 消息框控件、槽函数
    msgButton = new QPushButton(tr("标准消息对话框"));
    mainLayout->addWidget(msgButton, 3, 1);
    connect(msgButton, &QPushButton::clicked, this, &Dialog::showMsgDlg);
}

Dialog::~Dialog()
{

}

void Dialog::showFileDialog()
{
    // 获取打开的文件对话框中选中的文件的名称,getOpenFileName()函数
    QString s = QFileDialog::getOpenFileName(this, "open file dialog", "/");

    // 将获取到的名称添加到编辑框中
    fileEdit->setText(s);
}

void Dialog::showColorDialog()
{
    // 调用颜色对话框选择颜色,getColor()函数
    QColor color = QColorDialog::getColor(Qt::red);

    // 将在调色板选择的颜色放到背景板中
    if (color.isValid())
    {
        colorFrame->setPalette((QPalette)color);
    }
}

void Dialog::showFontDialog()
{
    bool ok;
    // 调用getFont()函数,如果用户点击ok就改变字体
    QFont f = QFontDialog::getFont(&ok);

    if (ok)
    {
        fontEdit->setFont(f);
    }
}

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

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

这里写图片描述


在项目中新建InputDlg类,用于实现各种标准输入框的功能:
inputdlg.h

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

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

private:
    QLabel *nameLabel1;
    QLabel *nameLabel2;
    QPushButton *nameButton;
    QLabel *sexLabel1;
    QLabel *sexLabel2;
    QPushButton *sexButton;
    QLabel *ageLabel1;
    QLabel *ageLabel2;
    QPushButton *ageButton;
    QLabel *scoreLabel1;
    QLabel *scoreLabel2;
    QPushButton *scoreButton;

    QGridLayout *mainLayout;

private slots:
    void changeName();
    void changeSex();
    void changeAge();
    void changeScore();
};

inputdlg.cpp

#include "inputdlg.h"

InputDlg::InputDlg(QDialog *parent) : QDialog(parent)
{
    nameLabel1 = new QLabel(tr("name :"));
    nameLabel2 = new QLabel(tr("twisted"));
    nameLabel2->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    nameButton = new QPushButton(tr("change name"));
    connect(nameButton, &QPushButton::clicked, this, &InputDlg::changeName);

    sexLabel1 = new QLabel(tr("sex :"));
    sexLabel2 = new QLabel(tr("man"));
    sexLabel2->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    sexButton = new QPushButton(tr("change sex"));
    connect(sexButton, &QPushButton::clicked, this, &InputDlg::changeSex);

    ageLabel1 = new QLabel(tr("age :"));
    ageLabel2 = new QLabel(tr("25"));
    ageLabel2->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    ageButton = new QPushButton(tr("change age"));
    connect(ageButton, &QPushButton::clicked, this, &InputDlg::changeAge);

    scoreLabel1 = new QLabel(tr("score :"));
    scoreLabel2 = new QLabel(tr("100"));
    scoreLabel2->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    scoreButton = new QPushButton(tr("change score"));
    connect(scoreButton, &QPushButton::clicked, this, &InputDlg::changeScore);

    mainLayout = new QGridLayout(this);

    mainLayout->addWidget(nameLabel1, 0, 0);
    mainLayout->addWidget(nameLabel2, 0, 1);
    mainLayout->addWidget(nameButton, 0, 2);
    mainLayout->addWidget(sexLabel1, 1, 0);
    mainLayout->addWidget(sexLabel2, 1, 1);
    mainLayout->addWidget(sexButton, 1, 2);
    mainLayout->addWidget(ageLabel1, 2, 0);
    mainLayout->addWidget(ageLabel2, 2, 1);
    mainLayout->addWidget(ageButton, 2, 2);
    mainLayout->addWidget(scoreLabel1, 3, 0);
    mainLayout->addWidget(scoreLabel2, 3, 1);
    mainLayout->addWidget(scoreButton, 3, 2);
}

// 标准字符串输入框
void InputDlg::changeName()
{
    // 字符串输入框由getText()函数来完成
    bool ok;
    QString name = QInputDialog::getText(this, tr("字符串输入框"), tr("plz input the name"), QLineEdit::Normal, nameLabel2->text(), &ok);

    if (ok && !name.isEmpty())
    {
        nameLabel2->setText(name);
    }
}

// 标准条目选择对话框
void InputDlg::changeSex()
{
    // 条目选择对话框由getItem()函数来完成
    // 下拉列表
    QStringList sexItems;
    sexItems << tr("man") << tr("women");

    bool ok;
    QString sex = QInputDialog::getItem(this, tr("条目选择框"), tr("plz select the sex"), sexItems, 0, false, &ok);
    if (ok && !sex.isEmpty())
    {
        sexLabel2->setText(sex);
    }
}

// 标准int类型输入框
void InputDlg::changeAge()
{
    bool ok;
    int age = QInputDialog::getInt(this, tr("整形输入框"), tr("plz intput the age"), ageLabel2->text().toInt(&ok), 0, 100, 1, &ok);

    if (ok)
    {
        ageLabel2->setText(tr("%1").arg(age));
    }
}

void InputDlg::changeScore()
{
    bool ok;
    double score = QInputDialog::getDouble(this, tr("浮点型输入框"), tr("plz intput the score"), scoreLabel2->text().toDouble(&ok), 0, 100, 1, &ok);

    if (ok)
    {
        scoreLabel2->setText(tr("%1").arg(score));
    }
}

这里写图片描述


新建MsgBoxDlg类,用于实现各种消息对话框的功能
消息对话框用于弹出各种各样的消息为用户提供提示与提醒,Qt提供了QMessageBox类来支持此项功能。
Question消息框为正常操作提供一个简单的询问,Information消息框为正常操作提供一个提示,Warning消息框提醒用户发生了一个错误,Critical消息框警告用户发生了一个严重错误。
msgboxdlg.h

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

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

private:
    QLabel *label;

    QPushButton *questionBtn;
    QPushButton *informationBtn;
    QPushButton *warningBtn;
    QPushButton *criticalBtn;
    QPushButton *aboutBtn;
    QPushButton *aboutQtBtn;

    QGridLayout *mainLayout;

private slots:
    void showQuestion();
    void showInfomation();
    void showWarning();
    void showCritical();
    void showAbout();
    void showAboutQt();
};

msgboxdlg.cpp

#include "msgboxdlg.h"

MsgBoxDlg::MsgBoxDlg(QDialog *parent) : QDialog(parent)
{
    setWindowTitle(tr("各种消息框"));
    mainLayout = new QGridLayout(this);

    label = new QLabel(tr("plz select a Msg"));
    mainLayout->addWidget(label, 0, 0, 1, 2);

    questionBtn = new QPushButton(tr("qusetion Msg"));
    connect(questionBtn, &QPushButton::clicked, this, &MsgBoxDlg::showQuestion);
    mainLayout->addWidget(questionBtn,1, 0);

    informationBtn = new QPushButton(tr("information Msg"));
    connect(informationBtn, &QPushButton::clicked, this, &MsgBoxDlg::showInfomation);
    mainLayout->addWidget(informationBtn, 1, 1);

    warningBtn = new QPushButton(tr("warning Msg"));
    connect(warningBtn, &QPushButton::clicked, this, &MsgBoxDlg::showWarning);
    mainLayout->addWidget(warningBtn, 2, 0);

    criticalBtn = new QPushButton(tr("critical Msg"));
    connect(criticalBtn, &QPushButton::clicked, this, &MsgBoxDlg::showCritical);
    mainLayout->addWidget(criticalBtn, 2, 1);

    aboutBtn = new QPushButton(tr("about Msg"));
    connect(aboutBtn, &QPushButton::clicked, this, &MsgBoxDlg::showAbout);
    mainLayout->addWidget(aboutBtn, 3, 0);

    aboutQtBtn = new QPushButton(tr("aboutQt Msg"));
    connect(aboutQtBtn, &QPushButton::clicked, this, &MsgBoxDlg::showAboutQt);
    mainLayout->addWidget(aboutQtBtn, 3, 1);
}



void MsgBoxDlg::showQuestion()
{
    // 使用QMessageBox::question()函数完成
    label->setText(tr("Question Msg Box"));

    switch (QMessageBox::question(this, tr("question Msg"), tr("question has over, did ok?"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok))
    {
    case QMessageBox::Ok:
        label->setText(tr("OK"));
        break;
    case QMessageBox::Cancel:
        label->setText(tr("CANCEL"));
        break;
    default:
        break;
    }

    return;
}

void MsgBoxDlg::showInfomation()
{
    // 使用QMessageBox::information()函数完成
    label->setText(tr("Information Msg Box"));

    QMessageBox::information(this, tr("information Msg"), tr("this is a information"));

    return;
}

void MsgBoxDlg::showWarning()
{
    // 使用QMessageBox::warning()函数完成
    label->setText(tr("Warning Msg Box"));

    switch ( QMessageBox::warning(this, tr("warning Msg"), tr("do you want to save?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save))
    {
    case QMessageBox::Save:
        label->setText(tr("SAVE"));
        break;
    case QMessageBox::Discard:
        label->setText(tr("discard"));
        break;
    case QMessageBox::Cancel:
        label->setText(tr("CANCEL"));
        break;
    default:
        break;
    }

    return;
}

void MsgBoxDlg::showCritical()
{
    // 使用QMessageBox::cirtical()函数完成,有错误时使用
    label->setText(tr("Critical Msg Box"));

    QMessageBox::critical(this, tr("critical Msg"), tr("this is a critical box"));

    return;
}

void MsgBoxDlg::showAbout()
{
    // 使用QMessageBox::about()函数完成
    label->setText(tr("About Msg Box"));

    QMessageBox::about(this, tr("about Msg"), tr("this is a about box"));

    return;
}

void MsgBoxDlg::showAboutQt()
{
    // 使用QMessageBox::aboutQt()函数完成
    label->setText(tr("AboutQt Msg Box"));

    QMessageBox::aboutQt(this, tr("aboutQt Msg"));

    return;
}

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值