标准对话框(颜色对话框、文件对话框、字体对话框、输入对话框、消息对话框、进度对话框、向导对话框)

标准对话框

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qdebug.h"
#include "qcolordialog.h"
#include "qfiledialog.h"
#include "qfontdialog.h"
#include "qinputdialog.h"
#include "qmessagebox.h"
#include "qprogressdialog.h"
#include "QTime"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_pErrorMessage = new QErrorMessage(this);
    /* 放开后,关于QT槽函数触发两次的问题
     * 1. 如果使用官方的写法on_btn_clicked(),可以不用写connect函数,会默认触发槽函数;
     * 2. 如果此时再次使用connect连接,就会导数on_btn_clicked()被执行两次,可以通过以下方式避免:
     *    a. 修改槽函数命名,如btn_cLicked;
     *    b. 强制指定:connect(ui->colorDialog_pushButton, SIGNAL(clicked(bool)), this, SLOT(on_colorDialog_pushButton_clicked()), Qt::UniqueConnection);
     */
//    connect(ui->colorDialog_pushButton, SIGNAL(clicked(bool)), this, SLOT(on_colorDialog_pushButton_clicked()));
}

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

void MainWindow::on_colorDialog_pushButton_clicked()
{
    /* QColorDialog::ShowALphaChannel 用来显示透明度(alpha)设置:0.0 — 1.0,1.0(窗口显示为255)表示完全不透明 */
    QColor color = QColorDialog::getColor(Qt::red, this, QString::fromUtf8("颜色对话框")/*, QColorDialog::ShowAlphaChannel*/);
    qDebug() << QString::fromUtf8("color: ") << color;
}

void MainWindow::on_fileDialog_pushButton_clicked()
{
    //选择单个文件
    QString fileName = QFileDialog::getOpenFileName(this, QString::fromUtf8("文件对话框(单个文件)"), QString::fromUtf8("F:\\"), QString::fromUtf8("图片文件( * png * jpg);;文本文件(* txt)"));
    qDebug() << QString::fromUtf8("fileName: ") << fileName;

    //选择多个文件
    QStringList fileNames = QFileDialog::getOpenFileNames(this, QString::fromUtf8("文件对话框(多个文件)"), QString::fromUtf8("F:\\"), QString::fromUtf8("图片文件( * png * jpg);;文本文件(* txt)"));
    qDebug() << QString::fromUtf8("fileNames: ") << fileNames;
}

void MainWindow::on_fontDialog_pushButton_clicked()
{
    //ok用于标记是否点击OK按钮
    bool ok;
    QFont font = QFontDialog::getFont(&ok, this);
    if(ok)
    {
        ui->fontDialog_pushButton->setFont(font);
        qDebug() << QString::fromUtf8("font: ") << font;
    }
    else {
        qDebug() << QString::fromUtf8("font: 没有选择字体");
    }
}

void MainWindow::on_inputDialog_pushButton_clicked()
{
    bool ok;
    //获取字符串
    QString string = QInputDialog::getText(this, QString::fromUtf8("输入字符串对话框"), QString::fromUtf8("请输入用户名:"), QLineEdit::Normal, QString::fromUtf8("admin"), &ok);
    if(ok)
    {
        qDebug() << QString::fromUtf8("string: ") << string;
    }

    //获取整数
    int iValue = QInputDialog::getInt(this, QString::fromUtf8("输入整数对话框"), QString::fromUtf8("请输-100到100之间的整数:"), 0, -100, 100, 1, &ok);
    if(ok)
    {
        qDebug() << QString::fromUtf8("int: ") << iValue;
    }

    //获取浮点数
    double dValue = QInputDialog::getDouble(this, QString::fromUtf8("输入浮点数对话框"), QString::fromUtf8("请输入-100到100之间的数值:"), 0, -100, 100, 1, &ok);
    if(ok)
    {
        qDebug() << QString::fromUtf8("double: ") << dValue;
    }

    //获取条目
    QStringList items;
    items.append(QString::fromUtf8("条目1"));
    items << QString::fromUtf8("条目2") << QString::fromUtf8("条目3");
    QString item = QInputDialog::getItem(this, QString::fromUtf8("输入条目对话框"), QString::fromUtf8("请选择或输入一个条目"), items, 0, true, &ok);
    if(ok)
    {
        qDebug() << QString::fromUtf8("item: ") << item;
    }
}

void MainWindow::on_messageBox_pushButton_clicked()
{
    int iRet = QMessageBox::question(this, QString::fromUtf8("问题对话框"), QString::fromUtf8("问题对话框"), QMessageBox::Yes, QMessageBox::No);
    if(QMessageBox::Yes == iRet)
    {
        qDebug() << QString::fromUtf8("问题对话框!");
    }

    iRet = QMessageBox::information(this, QString::fromUtf8("提示对话框"), QString::fromUtf8("提示对话框"), QMessageBox::Yes, QMessageBox::No);
    if(QMessageBox::Yes == iRet)
    {
        qDebug() << QString::fromUtf8("提示对话框!");
    }

    iRet = QMessageBox::warning(this, QString::fromUtf8("警告对话框"), QString::fromUtf8("警告对话框"), QMessageBox::Yes, QMessageBox::No);
    if(QMessageBox::Yes == iRet)
    {
        qDebug() << QString::fromUtf8("警告对话框!");
    }

    iRet = QMessageBox::critical(this, QString::fromUtf8("严重错误对话框"), QString::fromUtf8("严重错误对话框"), QMessageBox::Yes, QMessageBox::No);
    if(QMessageBox::Yes == iRet)
    {
        qDebug() << QString::fromUtf8("严重错误对话框!");
    }
}

void MainWindow::msleep(int ms)
{
    QTime reachTime = QTime::currentTime().addMSecs(ms);
    while(QTime::currentTime() < reachTime)
    {
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
    }
}

void MainWindow::on_progressDialog_pushButton_clicked()
{
    QProgressDialog progressDialog(QString::fromUtf8("文件复制进度"), QString::fromUtf8("取消"), 0, 100, this);
    progressDialog.setWindowTitle(QString::fromUtf8("进度对话框"));
    progressDialog.setWindowModality(Qt::WindowModal); //将对话框设置为模态
    progressDialog.show();
    for(int i = 0; i < 100; i++)
    {
        progressDialog.setValue(i);
        QCoreApplication::processEvents(); //避免界面冻结
        if(progressDialog.wasCanceled())
        {
            break;
        }
        msleep(100);
    }
    progressDialog.setValue(100);
    qDebug() << QString::fromUtf8("进度对话框: 复制结束!");
}

QWizardPage *MainWindow::createPage1()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(QString::fromUtf8("介绍"));
    return page;
}

QWizardPage *MainWindow::createPage2()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(QString::fromUtf8("用户选择信息"));
    return page;
}

QWizardPage *MainWindow::createPage3()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(QString::fromUtf8("结束"));
    return page;
}

void MainWindow::on_wizardDialog_pushButton_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle(QString::fromUtf8("向导对话框"));
    wizard.addPage(createPage1());
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());
    wizard.exec();
}

void MainWindow::on_errorMessage_pushButton_clicked()
{
    m_pErrorMessage->setWindowTitle(QString::fromUtf8("错误信息对话框"));
    m_pErrorMessage->showMessage(QString::fromUtf8("出错信息!!"));
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <qerrormessage.h>
#include <qwizard.h>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_colorDialog_pushButton_clicked();

    void on_fileDialog_pushButton_clicked();

    void on_fontDialog_pushButton_clicked();

    void on_inputDialog_pushButton_clicked();

    void on_messageBox_pushButton_clicked();

    void on_progressDialog_pushButton_clicked();

    void on_wizardDialog_pushButton_clicked();

    void on_errorMessage_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    QErrorMessage *m_pErrorMessage;

    void msleep(int ms);

    QWizardPage *createPage1();
    QWizardPage *createPage2();
    QWizardPage *createPage3();

};

#endif // MAINWINDOW_H

mainwindow.ui
标准对话框(颜色对话框、文件对话框、字体对话框、输入对话框、消息对话框、进度对话框、向导对话框)