Qt基础:六、标准对话框

1、颜色对话框

添加#include头文件
颜色对话框类QColorDialog 提供了一个可以获取指定颜色的对话框部件。
下面创建一个颜色对话框。

QColor color = QColorDialog::getColor(Qt::red,this,tr("颜色对话框"));
qDebug() << "color: " << color;

运行后
Qt基础:六、标准对话框_第1张图片这里使用了QColorDialog 的静态函数getColor()来获取颜色,它的3个参数的作用分别是:设置初始颜色指定父窗口和设置对话框标题。这里的Qt::red是Qt预定义的颜色对象,可以直接单击该字符串,然后按下 F1查看其快捷帮助,或者在帮助索引中通过Qt::GlobalColor 关键字,从而查看到所有的预定义颜色列表。getColor()函数返回一个QColor类型数据。
现在运行程序,然后单击“颜色对话框”按钮,如果不选择颜色,直接单击OK,那么输出信息应该是QColor(ARGB1,1,0,0)
在这里插入图片描述这里的4个数值分别代表透明度(alpha)、红色(red)、绿色(green)和蓝色(blue)。它们的数值都是从0.0~1.0,有效数字为6位。对于alpha 来说,1.0表示完全不透明,这是默认值,而0.0表示完全透明。对于三基色红、绿、蓝的数值,还可以使用0~255 来表示,颜色对话框中就是使用这种方法。其中,0表示颜色最浅,255表示颜色最深。在0255与001.0之间可以通过简单的数学运算来对应,其中0对应00,255对应1.0在颜色对话框中还可以添加对alpha的设置就是在getColor()函数中再使用最后一个参数:

QColor color = QColorDialog::getColor(Qt::red, this, tr("颜色对话框"),QColorDialog::ShowAlphaChannel);
qDebug() << "color: " << color;

这里的QColorDialog::ShowAlphaChannel用来显示alpha设置。可以运行程序查看效果。
前面使用了 QColorDialog类的静态函数来直接显示颜色对话框,好处是不用创建对象。但是如果想要更灵活的设置,则可以先创建对象,然后进行各项设置:

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

2、文件对话框

文件对话框QFileDialog类提供了一个允许用户选择文件或文件夹的对话框。
添加#include头文件

QStringList fileNames = QFileDialog::getOpenFileName(this, tr("文件对话框"),"D:", tr("图片文件(*png *jpg)"));
qDebug()<< "fileNames:" << fileNames;

Qt基础:六、标准对话框_第2张图片

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

QString fileName = QFileDialog::getOpenFileName(this, tr("文件对话框"),"D:", tr("图片文件(*png *jpg);;文本文件(*txt)"));
qDebug() << "fileName:" << fileName;

Qt基础:六、标准对话框_第3张图片这时再次运行程序,就可以在文件对话框的文件类型中选择“文本文件”类型了.前面这个程序只能选择单个文件,要同时选择多个文件,则可以使用 getOpenFileNames()函数例如:

QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("文件对话框"),"D:", tr("图片文件(*png *jpg)"));
qDebug()<< "fileNames:" << fileNames;

Qt基础:六、标准对话框_第4张图片

运行程序就可以通过按住ctrl和alt键同时选择多个图片文件了,多个文件名存放在QStringList类型变量中。当然也可以不使用这些静态函数,而是建立对话框对象来操作。
除了上面的两个函数外,QFileDialog类还提供了getSaveFileName()函数来实现保存文件对话框和文件另存为对话框,还有getExistingDirectory()函数来获取一个已存在的文件夹路径。

3、字体对话框

字体对话框QFontDialog类提供了一个可以选择字体的对话框部件。
添加#include头文件

// ok用于标记是否按下了“OK”按钮
bool ok;
QFont font = QFontDialog::getFont(&ok, this);
// 如果按下“OK”按钮,那么让“字体对话框”按钮使用新字体
// 如果按下“Cancel”按钮,那么输出信息
if (ok) 
	ui->pushButton_3->setFont(font);
else 
	qDebug() << tr("没有选择字体!");

这里使用了QFileDialog类的getFont()静态函数来获取选择的字体。这个函数的第一个参数是 bool类型变量,用来存放按下的按钮状态,比如在打开的字体对话框中单击了OK按钮那么这里的ok就为true,这样来告诉程序已经选择了字体
Qt基础:六、标准对话框_第5张图片

4、输入对话框

输入对话框QInputDialog类用来提供一个对话,可以让用户输入一个单一的数的单击信号槽,更改如下:值或字符串。
添加头文件#include

bool ok;
// 获取字符串
QString string = QInputDialog::getText(this, tr("输入字符串对话框"),
                                       tr("请输入用户名:"), QLineEdit::Normal,tr("admin"), &ok);
if(ok) qDebug() << "string:" << string;
// 获取整数
int value1 = QInputDialog::getInt(this, tr("输入整数对话框"),
                                  tr("请输入-1000到1000之间的数值"), 100, -1000, 1000, 10, &ok);
if(ok) qDebug() << "value1:" << value1;
// 获取浮点数
double value2 = QInputDialog::getDouble(this, tr("输入浮点数对话框"),
                                        tr("请输入-1000到1000之间的数值"), 0.00, -1000, 1000, 2, &ok);
if(ok) qDebug() << "value2:" << value2;
QStringList items;
items << tr("条目1") << tr("条目2");
// 获取条目
QString item = QInputDialog::getItem(this, tr("输入条目对话框"),
                                     tr("请选择或输入一个条目"), items, 0, true, &ok);
if(ok) qDebug() << "item:" << item;

Qt基础:六、标准对话框_第6张图片
Qt基础:六、标准对话框_第7张图片
Qt基础:六、标准对话框_第8张图片
这里一共创建了4个不同类型的输人对话框。
getText()函数可以提供一个可输入字符串的对话框,各参数的作用分别是:指定父窗口设置窗口标题、设置对话框中的标签显示文本、设置输人字符串的显示模式(例如密码可以显示成小黑点,这里选择了显示用户输人的实际内容)设置输入框中的默认字符串和设置获取按下按钮信息的bool变量;
getInt()函数可以提供一个输入整型数值的对话框,其中的参数 100表示默认的数值是100,-1000表示可输人的最小值是-1000,1000表示可输人的最大值是1000,10表示使用箭头按钮,数值每次变化 10;
getDouble()函数可以提供一个输入浮点型数值的对话框,其中的参数2表示小数的位数为2;
getItem()函数提供一个可以输人一个条目的对话框,需要先给它提供一些条目,如这里定义的QStringList类型的items,其中参数0表示默认显示列表中的第0个条目(0就是第一个)参数true设置条目是否可以被更改,true 就是可以被更改。

5、消息对话框

消息对话框QMessageBox类提供了一个模态的对话框来通知用户一些信息,或者向用户提出一个问题并且获取答案。
添加头文件#include

// 问题消息对话框
    int ret1 = QMessageBox::question(this, tr("问题对话框"),
                                     tr("你了解Qt吗?"), QMessageBox::Yes, QMessageBox::No);
    if(ret1 == QMessageBox::Yes) qDebug() << tr("问题!");
    // 提示消息对话框
    int ret2 = QMessageBox::information(this, tr("提示对话框"),
                                        tr("这是Qt书籍!"), QMessageBox::Ok);
    if(ret2 == QMessageBox::Ok) qDebug() << tr("提示!");
    // 警告消息对话框
    int ret3 = QMessageBox::warning(this, tr("警告对话框"),
                                    tr("不能提前结束!"), QMessageBox::Abort);
    if(ret3 == QMessageBox::Abort) qDebug() << tr("警告!");
    // 错误消息对话框
    int ret4 = QMessageBox::critical(this, tr("严重错误对话框"),
                                     tr("发现一个严重错误!现在要关闭所有文件!"), QMessageBox::YesAll);
    if(ret4 == QMessageBox::YesAll) qDebug() << tr("错误");
    // 关于消息对话框
    QMessageBox::about(this, tr("关于对话框"),
                       tr("yafeilinux致力于Qt及Qt Creator的普及工作!"));

这里创建了4个不同类型的消息对话框,分别拥有不同的图标还有提示音(这个是操作系统设置的),几个参数分别用于设置父窗口、标题栏、显示信息和拥有的按钮。
这里使用的按钮都是 QMessageBox类提供的标准按钮。
这几个静态函数的返回值就是那些标准按钮,由QMessageBox::StandardButton 枚举类型指定,可以使用返回值来判断用户按下了哪个按钮。
about()函数没有返回值,因为它默认只有一个按钮,与其相似的还有一个aboutQt()函数,用来显示现在使用的 Qt版本等信息。
如果想使用自定义的图标和按钮,那么可以创建QMessageBox类对象,然后使用相关函数进行操作

6、进度对话框

进度对话框QProgressDialog 对一个耗时较长操作的进度提供了反馈。
添加#include头文件

QProgressDialog dialog(tr("文件复制进度"), tr("取消"), 0, 50000, this);
dialog.setWindowTitle(tr("进度对话框"));     // 设置窗口标题
dialog.setWindowModality(Qt::WindowModal);  // 将对话框设置为模态
dialog.show();
for(int i=0; i<50000; i++) {                // 演示复制进度
   dialog.setValue(i);                     // 设置进度条的当前值
   QCoreApplication::processEvents();      // 避免界面冻结
   if(dialog.wasCanceled()) break;         // 按下取消按钮则中断
}
dialog.setValue(50000);    // 这样才能显示100%,因为for循环中少加了一个数
qDebug() << tr("复制结束!");

这里首先创建了一个QProgressDialog类对象dialog,构造函数的参数分别用于设置对话框的标签内容、取消按钮的显示文本、最小值、最大值和父窗口。然后将对话框设置为模态并进行显示。
for()循环语句模拟了文件复制过程,setValue()函数使进度条向前推进;为了避免长时间操作而使用户界面冻结,必须不断地调用 QCoreApplication类的静态函数 processEvents(),可以将它放在 for()循环语句中。
使用QProgressDialog的 wasCanceled()函数来判断用户是否按下了“取消”按钮如果是则中断复制过程。
这里使用了模态对话框,QProgressDialog 还可以实现非模态对话框,不过它需要定时器等的帮助。

7、错误信息对话框

错误信息对话框QErrorMessage类提供了一个显示错误信息的对话框。
首先添加类前置声明:
在这里插入图片描述

class QErrorMessage;

然后添加私有对象:

QErrorMessage *errordlg;

添加头文件#include QErrorMessage>,并在构造函数中添加如下代码:

errordlg = new QErrorMessage(this);

使用:

errordlg->setWindowTitle(tr("错误信息对话框"));
errordlg->showMessage(tr("这里是出错信息!"));

Qt基础:六、标准对话框_第9张图片
这里首先新建了一个QErrorMessage对话框并且调用它的showMessage()函数来显示错误信息,调用这个函数时对话框会以非模态的形式显示出来。错误信息对话框中默认有一个Show thismessageagain 复选框可以选择以后是否还要显示相同错误信息;为了这个复选框的功能有效,不能像前面几个例子一样在槽中直接创建对话框

8、向导对话框

向导对话框QWizard类提供了一个设计向导界面的框架,比如安装软件时的向导和创建项目时的向导。QWizard 之所以被称为框架,是因为它具有设计一个向导全部的功能函数,可以使用它来实现想要的效果。
Qt中包含了TrivialWizard,License Wizard和Class Wizard这3个示例程序可以参考一下。
添加头文件#include
添加函数声明

//这是用来显示的三个页面
QWizardPage *createPage1();        // 新添加
QWizardPage *createPage2();        // 新添加
QWizardPage *createPage3();        // 新添加

这里声明了3个返回值为QWizardPage类对象的指针函数,用来生成3个向导页面。

QWizardPage * MyWidget::createPage1()  // 向导页面1
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("介绍"));
    return page;
}
QWizardPage * MyWidget::createPage2()  // 向导页面2
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("用户选择信息"));
    return page;
}
QWizardPage * MyWidget::createPage3()  // 向导页面3
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("结束"));
    return page;
}
QWizard wizard(this);
wizard.setWindowTitle(tr("向导对话框"));
wizard.addPage(createPage1());     // 添加向导页面
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();

在各个函数中分别新建了向导页面,并且设置了它们的标题.
这里新建了QWizard类对象,然后使用addPage()函数为其添加了3个页面。这里的参数是QWizardPage类型的指针,可以直接调用生成向导页面函数。运行程序可以看到向导页面出现的顺序和添加向导页面的顺序是一致的。

你可能感兴趣的:(QT基础,QT,qt)