3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)

  • 标准对话框
    Qt提供了一些常用的对话框类型,全部继承自QDialog类,并增加了自己的特色功能,比如获取颜色、显示特性信息等。在帮助文档中可以查看Standard Dialogs关键字。

  • 颜色对话框
    QColorDialog提供了一个可以获取指定颜色的对话框部件。

//QColorDialog
void MyWidget::on_pushButton_clicked()
{
    QColor color=QColorDialog::getColor(Qt::red,this,tr("color dialog"),QColorDialog::ShowAlphaChannel);
    qDebug()<<"color"<<color;
}

3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第1张图片
这里通过使用QColorDialog的静态函数getColor()函数来获取颜色,它的四个参数的作用分别为:设置初始颜色、父窗口、对话框标题和添加对透明度(alpha)的设置。
Qt::red是Qt预定义的颜色对象,可以在帮助文档查看Qt::GlobalColor关键字,可以看到所有预定义颜色列表。
getColor()函数返回的是一个QColor类型数据。如果不选择颜色直接单击OK键,那么输出的信息应该是(ARGB 1,1,0,0),这里的四个值分别代表透明度(alpha)、红色、绿色和蓝色。它的数值都是从0.0~1.0,有效数字为6位。对与alpha来说1表示完全不透明,这是默认值,而0.0表示完全透明。对于三基色红、绿、蓝的数值,还可以使用0~255来表示,颜色对话框就是使用这种方法。其中0表示颜色最浅,255表示颜色最深。
前面使用了QColorDialog类的静态函数来直接显示颜色对话框,好处是不用创建对象。但是如果想要更灵活的设置时,可以先创建对象,然后进行各项设置。

void MyWidget::on_pushButton_click()
{
    QColorDialog dialog(Qt::red,this);//创建对象
    dialog.setOpinion(QColorDialog::ShowAlphaChannel);//显示alpha选项
    dialog.exec();//以模态方式运行对话框
    QColor color=dialog.currentColor();//获取当前颜色
    qDebug()<<"color"<<color;//输出颜色信息
}

这样的代码与前面使用静态函数QColroDialog::getColro()函数实现的效果是等效的。

  • 文件对话框
    文件对话框类QFileDialog提供了一个允许用户选择文件和文件夹的对话框。需要添加头文件#include<QFileDialog>
//QFileDialog
void MyWidget::on_pushButton_2_clicked()
{
    QString fileName=QFileDialog::getOpenFileName(this,tr("file dialog"),"E:",tr("文本文件(*txt *doc)"));
    qDebug()<<"fileName:"<<fileName;
}


这里使用QFileDialog类中的getOpenFileName()函数来获取选择的文件名,这个函数会议模态方式运行文件对话框,然后选择一个文件,单击“打开”按钮后,这个函数便可以返回选择的文件的文件名。它的4个参数的作用分别是:指定父窗口、设置对话框标题、指定默认打开的目录路径和设置文件类型过滤器。如果不指定文件过滤器,默认是选择所有类型的文件。这里只选择txt和doc两种格式的文件(注:代码中*txt和 *doc之间需要一个空格),那么打开的文件对话框中只能显示目录下的两种格式的文件和目录下的文件夹。还可以设置多个不同类别的过滤器,不同类别间使用两个分号”;;”隔开。例如:

QString fileName=QFileDialog::getOpenFileName(this,tr("file dialog"),"E:",tr("文本文件(*txt);;图片文件(*png *jpg)"));

前面这个程序只能选择单个文件,要同时选择多个文件,可以使用getOpenFileNames()函数,例如:

//QFileDialog
void MyWidget::on_pushButton_2_clicked()
{
    QStringList fileNames=QFileDialog::getOpenFileNames(this,tr("file dialog"),"E:",tr("文本文件(*txt)"));
    qDebug()<<"fileNames:"<<fileNames;
}

也可以不使用这这先函数的静态函数,而是建立对话框对象来操作。除了上面两个函数,QFileDialog类还提供了getSaveFile()函数来实现保存文件对话框和文件另存为对话框,还有getExistingDirectory()函数来获取一个已存在的文件夹路径。他们的用法与上面的例子类似。

  • 字体对话框
    QFontDialog类提供了一个可以选择字体的对话框部件。添加头文件#include<QFontDialog>
// 字体对话框
void MyWidget::on_pushButton_3_clicked()
{
    // 标记是否按下了“OK”按钮
    bool ok;

    // 获得选择的字体
    QFont font = QFontDialog::getFont(&ok,this);

    // 如果按下“OK”按钮,那么让“字体对话框”按钮使用新字体,ok被赋值为true
    // 如果按下“Cancel”按钮,那么输出信息
    if(ok) ui->pushButton_3->setFont(font);
    else qDebug() <<tr("没有选择字体!");
}

3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第2张图片

  • 输入对话框
    QInputDialog类用来提供一个简单方便的对话框,从而从用户那里获取一个单一的数值或字符串。添加头文件#include<QInputDialog>
// 输入对话框
void MyWidget::on_pushButton_4_clicked()
{
    bool ok;
    // 获取字符串
    QString string = QInputDialog::getText(this,tr("input string dialog"),tr("input userName:"),QLineEdit::Normal,tr("admin"),&ok);
    if(ok) qDebug() << "string:"<<string;

    // 获取整数
    int value1 = QInputDialog::getInt(this,tr("input int dialog"),
    tr("please input int value [-1000~1000]"),100,-1000,1000,10,&ok);
    if(ok) qDebug() << "value1:"<<value1;

    // 获取浮点数
    double value2 = QInputDialog::getDouble(this,tr("input float dialog"),
   tr("please input float value [-1000~1000]"),0.00,-1000,1000,2,&ok);
    if(ok) qDebug() << "value2:"<<value2;

    // 获取条目
    QStringList items;
    items << tr("item 1") << tr("item 2");
    QString item = QInputDialog::getItem(this,tr("input item dialog"),
            tr("Please choose one item"),items,0,true,&ok);
    if(ok) qDebug() << "item:"<<item;
}

3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第3张图片
getText()函数可以提供一个可输入字符串的对话框,参数的作用分别是:指定父窗口、设置窗口标题、设置对话框中的标签的显示文本,设置输入的字符串的显示模式(例如密码可以显示成小黑点,这里选择了显示用户输入的实际内容)、设置输入框汇总的默认字符串和设置获取按下按钮信息的bool变量。


3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第4张图片
getInt()函数可以提供一个输入整型数值的对话框,其中的参数100表示默认数值是100,-1000表示可以输入的最小值是-1000,1000表示可以输入的最大值是1000,10表示使用箭头按钮,数值每次便哈10.
getDouble()函数同getInt()函数使用方法类似。


getItem()函数提供了一个可输入一个条目的对话框,需要先给他提供一些条目,例如这里定义了QStringList类型的items.它的参数0表示默认显示列表的第0个条目(0就是第一个);然后是参数true,设置条目是否可以被更改,true就是可以被更改。

  • 消息对话框
    消息对话框QMessageBox类提供了一个模态的对话框用来通知用户一些信息,或者向用户提出一个问题并获取答案。添加头文件#include<QMessageBox>
void MyWidget::on_pushButton_5_clicked()
{
    //问题对话框
    int ret1=QMessageBox::question(this,tr("Question Dialog"),tr("Do you know Qt?"),QMessageBox::Yes,QMessageBox::No);
    if(ret1==QMessageBox::Yes)qDebug()<<tr("question!");

    //提问对话框
    int ret2=QMessageBox::information(this,tr("Information Question"),tr("This is a Qt Book!"),QMessageBox::Ok);
    if(ret2==QMessageBox::Ok)qDebug()<<tr("information!");

    //警告对话框
    int ret3=QMessageBox::warning(this,tr("Warning Dialog"),tr("Can not end in advance"),QMessageBox::Abort);
    if(ret3==QMessageBox::Abort)qDebug()<<tr("Warning!");

    //错误对话框
    int ret4=QMessageBox::critical(this,tr("Error Dialog"),tr("Find a critical error! Shut down all the files now!"),QMessageBox::YesAll);
    if(ret4==QMessageBox::YesAll)qDebug()<<tr("Error!");

    //关于对话框
    QMessageBox::about(this,tr("About Dialog"),tr("Baidu is a search engine!"));

}


3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第5张图片
3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第6张图片
3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第7张图片
3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第8张图片
这里创建了不同类型的消息对话框,分别拥有不同的图标及提示声音,参数分别是父窗口、标题栏、显示信息和拥有的按钮。这几个静态函数的返回值就是这下按钮。about()函数没有返回值,因为它只默认只有一个按钮。如果想使用自己的图标和自定义的按钮,那么可以创建QMessBox类对象,然后使用相关函数进行操作。

  • 进度对话框
    QProgressDialog对一个耗时较长的操作进度提供了反馈。添加头文件#include<QProgressDialog>
void MyWidget::on_pushButton_6_clicked() { //创建对象 QProgressDialog dialog(tr("File Copy Progress"),tr("cancle"),0,500000,this);
    dialog.setWindowTitle(tr("Progress Dialog"));//设置窗口标题
    dialog.setWindowModality(Qt::WindowModal);//将对话框设置为模态
    dialog.show();

    for(int i=0;i<500000;i++){//演示复制进度
        dialog.setValue(i);//设置进度条的当前值
        QCoreApplication::processEvents();//避免界面冻结
        if(dialog.wasCanceled())break;//按下cancle按钮则中断
    }
    //这样才能显示100%,因为for循环中少加了一个数
    dialog.setValue(500000);
    qDebug()<<tr("Copy End!");
}

3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第9张图片
QProgressDialog类对象dialog,构造函数参数分别为对话框的标签内容、取消按钮的显示文本、最小值、最大值和父窗口。
为了避免长时间的操作而是用户界面冻结,必须不断调用QCoreApplication类的静态函数processEvents()。
这里使用了模态对话框,其实QProgressDialog还可以实现非模态对话框,不过它需要定时器等的帮助。

  • 错误信息对话框
    QErrorMessage类提供了一个显示错误信息的对话框。添加头文件#include<QErrorMessage>
void MyWidget::on_pushButton_7_clicked() { QErrorMessage *dialog=new QErrorMessage(this);
    dialog->setWindowTitle(tr("Error Dialog"));
    dialog->showMessage(tr("This is the error information here!"));
}


调用showMessage()函数时对话框会以非模态的形式显示出来。

  • 向导对话框
    QWizard类提供了一个设计向导界面的框架。比如安装软件时的向导。QWizard之所以被称为框架,是因为它具有设计一个向导的全部功能函数,可以使用它来实现想要的效果。添加头文件#include<QWizard>在MyWidget类中的声明中添加private类型函数声明
private: Ui::MyWidget *ui;
    QWizardPage *createPage1();//new add
    QWizardPage *createPage2();//new add
    QWizardPage *createPage3();//new add

在mywidget.cpp文件中对函数进行定义:

QWizardPage* MyWidget::createPage1(){
    QWizardPage *page=new QWizardPage;
    page->setTitle(tr("Intruction"));
    return page;
}

QWizardPage* MyWidget::createPage2(){
    QWizardPage *page=new QWizardPage;
    page->setTitle(tr("User Choice Information"));
    return page;
}

QWizardPage* MyWidget::createPage3(){
    QWizardPage *page=new QWizardPage;
    page->setTitle(tr("End"));
    return page;
}

进入槽函数:

void MyWidget::on_pushButton_8_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle(tr("Wizard Dialog"));
    wizard.addPage(createPage1());
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());
    wizard.exec();
}

3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第10张图片
3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第11张图片
3.2 对话框QDialog(2)-->Qt Creater 快速入门(笔记)_第12张图片
上面程序中的向导页面是线性的,而且什么内容也没添加。如果想设计自己的想到页面,或者添加图片和自定义按钮,或者设置向导的顺序,那么需要多了解QWizard类和QWizardPage类的成员函数了。

还有3个与打印有关的标准对话框类QPageSetupDialog(页面设置对话框)、QPrintDialog(打印对话框)和QPrintPreviewDialog(打印预览对话框)。

你可能感兴趣的:(对话框)