QT 8 种常见的QDialog 类对话框用法【全网最详细!!!速收藏】

CSDN 2024-07-05 14:05:02 阅读 58

文章目录

【概要】【架构流程】【实现细节】▶ 颜色对话框▶ 文件对话框▶ 字体对话框▶ 输入对话框▶ 消息对话框▶ 进度对话框▶ 错误信息对话框▶ 向导对话框

小结

【概要】

Qt提供了一些常用的 【标准对话框】,它们全部继承自 QDialog 类,并增加了自己的特色功能。比如获取颜色、显示特定信息等。

今天我们以demo为例,简单介绍8种常见的QDialog 类对话框用法。

它们分别是:

对话框类型 QDialog 类
颜色对话框 QColorDialog
文件对话框 QFileDialog
字体对话框 QFontDialog
输入对话框 QInputDialog
消息对话框 QMessageBox
进度对话框 QProgressDialog
错误信息对话框 QErrorMessage
向导对话框 QWizardPage

【架构流程】

新建一个项目,即新建 Qt Widgets 应用,

项目名称:mvdialog2

基类选择:QWidget

类名:MyWidget

完成后双击 mywidget.ui 文件进入设计模式,在界面上添加一些按钮,如图所示。

源码分享,我放在这篇文章里啦!

八种QDialog 类的具体实现方式<附详细代码,全网最详细!>

请添加图片描述

【实现细节】

▶ 颜色对话

▌样例

方法二的样式

▌实现方式

『方法一』

这里使用了 QColorDialog 的静态函数 getColor()来获取颜色,3个参数分别是:①设置初始颜色;②指定父窗口;③设置对话框标题。这里的 Qt::red 是 Qt预定义的颜色对象,可以直接单击该字符串,然后按下 F1 查看其快捷帮助,或者在帮助索引中通过 Qt::GlobalColor关键字,从而查看到所有的预定义颜色列表。

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

QColorDialog::ShowAlphaChannel);

『方法二』

这里的 QColorDialog::ShowAlphaChannel 用来显示 alpha 设置。前面的方法一,好处是不用创建对象。但是如果想要更灵活的设置,则可以使用方法二

先创建对象,然后进行各项设置,如使用以下实现的方式,显示效果如样例图:

QColorDialog dialog(Qt::red, this); // 创建对象

dialog.setOption(QColorDialog::ShowAlphaChannel); // 显示alpha选项

dialog.exec(); // 以模态方式运行对话框

QColor color = dialog.currentColor(); // 获取当前颜色

qDebug() << "color: " << color;

▶ 文件对话框

▌样例

文件对话框

▌实现方式

<code> QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("文件对话框"),

"D:", tr("图片文件(*png *jpg)"));

qDebug()<< "fileNames:" << fileNames;

▶ 字体对话框

▌样例

字体对话框

▌实现方式

<code> // ok用于标记是否按下了“OK”按钮

bool ok;

QFont font = QFontDialog::getFont(&ok, this);

// 如果按下“OK”按钮,那么让“字体对话框”按钮使用新字体

// 如果按下“Cancel”按钮,那么输出信息

if (ok) ui->pushButton_3->setFont(font);

else qDebug() << tr("没有选择字体!");

▶ 输入对话框

▌样例

输入对话框

▌实现方式

<code> 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;

▶ 消息对话框

▌样例

请添加图片描述

▌实现方式

<code> // demo1 问题对话

int ret1 = QMessageBox::question(this, tr("问题对话框"),

tr("你了解Qt吗?"), QMessageBox::Yes, QMessageBox::No);

if(ret1 == QMessageBox::Yes) qDebug() << tr("问题!");

// demo2 提示对话框

int ret2 = QMessageBox::information(this, tr("提示对话框"),

tr("这是Qt书籍!"), QMessageBox::Ok);

if(ret2 == QMessageBox::Ok) qDebug() << tr("提示!");

// demo3 警告对话框

int ret3 = QMessageBox::warning(this, tr("警告对话框"),

tr("不能提前结束!"), QMessageBox::Abort);

if(ret3 == QMessageBox::Abort) qDebug() << tr("警告!");

// demo4 错误对话框

int ret4 = QMessageBox::critical(this, tr("严重错误对话框"),

tr("发现一个严重错误!现在要关闭所有文件!"), QMessageBox::YesAll);

if(ret4 == QMessageBox::YesAll) qDebug() << tr("错误");

// demo5 关于对话框

QMessageBox::about(this, tr("关于对话框"),

tr("yafeilinux致力于Qt及Qt Creator的普及工作!"));

▶ 进度对话框

▌样例

进度对话框

▌实现方式

<code> 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("复制结束!");

▶ 错误信息对话框

▌样例

错误信息对话框

▌实现方式

<code> errordlg->setWindowTitle(tr("错误信息对话框"));

errordlg->showMessage(tr("这里是出错信息!"));

▶ 向导对话框

▌样例

向导对话框

▌实现方式

<code>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;

}

// 向导对话

void MyWidget::on_pushButton_8_clicked()

{

QWizard wizard(this);

wizard.setWindowTitle(tr("向导对话框"));

wizard.addPage(createPage1()); // 添加向导页面

wizard.addPage(createPage2());

wizard.addPage(createPage3());

wizard.exec();

}

小结

在QT开发的道路上,需要不断地深入QT相关机制的背后,才能够更好地高效呈现作品,做好产品。

希望今天的分享,对你有所帮助。喜欢我的干货文章,就帮忙点个赞吧~~谢谢啦



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。