当前位置:   article > 正文

学习QT之基本对话框_qt文件选择对话框

qt文件选择对话框

常用的标准基本对话框包括:标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialot)、标准消息对话框(QMessageBox)

各种标准基本对话框通过调用陪你过各自不同的静态函数来完成其功能,具体说明见下表:

相关类

类说明

静态函数

函数说明

getOpenFileName

获得用户选择的文件名

QFileDialog

标准文件对话框

getSaveFileName

获得用户保存的文件名

getExistingDirectory

获得用户选的的已存在的目录名

getOpenFileNames

获得用户选择的文件名列表

QColorDialog

标准颜色对话框

getColor

获得用户选择的颜色值

QFontDialog

标准字体对话框

getFont

获得用户选择的字体

getText

标准字符串输入对话框

QInputDialog

标准输入对话框

getItem

下拉表条目输入框

getInt

int类型数据输入对话框

getDouble

double类型数据输入对话框

QMessageBox::question

Question消息框

QMessageBox::information

Information消息框

Question消息框

标准消息对话框

QMessageBox::warning

Warning消息框

QMessageBox::critical

Critical消息框

QMessageBox::about

About消息框

QMessageBox::aboutQt

About Qt消息框

Qt学习基地:Qt学习基地icon-default.png?t=N4P3https://ke.qq.com/course/444655?flowToken=1044418

一、标准文件对话框

1、函数原型说明

  1. QString QFileDialog::getOpenFileName
  2. (
  3. QWidget* parent = 0, //标准文件对话框的父窗口
  4. const QString & caption = QString(), //标准文件对话框的标题名
  5. const QString & dir = QString(), //注(1
  6. const QString & filter = QString(), //注(2
  7. QString * selectedFilter=0, //用户选择的过滤器通过此参数返回
  8. Options options=0 //选择显示文件名的格式,默认是同时显示目录与文件名
  9. )

注(1):指定了默认的目录,若此参数带有文件名,则文件将是默认选中的文件。

注(2):此参数对文件类型进行过滤,只有与过滤器匹配的文件类型才显示,可以同时指定多种过滤方式供用户选择,多种过滤器之间使用​​;;​​隔开。

2、使用示例

  1. void Dialog::showFile()
  2. {
  3. QString s = QFileDialog::getOpenFileName(this,"open file dialog","/","C++ files(*.cpp);;C files(*.c);;Head files(*.h)");
  4. //第一个参数:标准文件对话框的父窗口;第二个参数:标准文件对话框的标题;第三个参数:指定默认的目录;第四个参数:文件过滤器
  5. fileLineEdit->setText(s);
  6. }

3、运行结果

 

二、标准颜色对话框

1、函数原型说明

  1. QColor::getColor
  2. (
  3. const QColor & initial = Qt::white, //注(1
  4. QWidget* parent = 0 //标准颜色对话框的父窗口
  5. )

注(1):指定了默认选中的颜色,默认为白色。通过QColor::isValid()函数可以判断用户选择的颜色是否有效,但是当用户选择文件是,如果选择“取消”(Cancel),则QColor::isValid()函数将返回false。

2、使用示例

  1. void Dialog::showColor()
  2. {
  3. QColor c = QColorDialog::getColor(Qt::blue);
  4. if(c.isValid())
  5. {
  6. colorFrame->setPalette(QPalette(c));
  7. }
  8. }

3、运行结果

 

三、标准字体对话框

1、函数原型说明

  1. QFont::getFont
  2. (
  3. bool* ok, //注(1)
  4. QWidget* parent = 0 //标准字体对话框的父窗口
  5. )

注(1):若用户单击“OK”按钮,则该参数*ok为true,函数返回用户所选择的字体;否则,将设为false,此时函数返回默认字体。

2、使用示例

  1. void Dialog::showFont()
  2. {
  3. bool ok;
  4. QFont f = QFontDialog::getFont(&ok);
  5. if(ok)
  6. fontLineEdit->setFont(f);
  7. }

3、运行结果

 

四、标准输入对话框

1、函数原型说明

标准字符串输入对话框

  1. QString getText
  2. (
  3. QWidget* parent, //标准输入对话框的父窗口
  4. const QString& title, //标准输入对话框的标题名
  5. const QString& label, //标准输入对话框的标签提示
  6. QLineEdit::EchoMode mode=QLineEdit::Normal,
  7. //指定标准输入对话框中QLineEidt控件的输入模式
  8. const QString& text = QString(), //标准字符输入对话中弹出式QLineEdit控件默认出现的文字
  9. bool* ok = 0, //注(1)
  10. Qt::WindowFlags flags = 0 //指明标准输入对话框的窗体标识
  11. )

注(1):指示标准输入对话框的哪个按钮被触发,若为true,则表示用户单击了“OK”(确定)按钮;若为false,则表示用户单击了“Cancle”(取消)按钮。

标准条目选择对话框

  1. QString getItem
  2. (
  3. QWidget* parent, //标准输入对话框的父窗口
  4. const QString& title, //标准输入对话框的标题名
  5. const QString& label, //标准输入对话框的标签提示
  6. const QStringList& items, //注(1
  7. int current = 0, //注(2
  8. bool editable = true, //指定QComboBox控件中显示的文字是否可编辑
  9. bool* ok = 0, //注(3)
  10. Qt::WindowFlags flags = 0 //指明标准输入对话框的窗体标识
  11. )

注(1):指定标准输入对话框中QComboBox控件显示的可选条目为一个QStringList对象

注(2):标准条目选择对话框弹出时QComboBox控件中默认显示的条目序号

注(3):指示标准输入对话框的哪个按钮被触发,若ok为true,则表示用户单击了“OK”(确定)按钮;若ok为false,则表示用户单击了“Cancle”(取消)按钮。

标准int类型输入对话框

  1. int getInt
  2. (
  3. QWidget* parent, //标准输入对话框的父窗口
  4. const QString& title, //标准输入对话框的标题名
  5. const QString& label, //标准输入对话框的标签提示
  6. int value = 0, //指定标准输入对话框中QSpinBox控件的默认显示值
  7. int min = -2147483647, //指定QSpinBox控件的数值范围
  8. int max = 2147483647, //指定QSpinBox控件的数值范围
  9. int step = 1, //指定QSpinBox控件的步进值
  10. bool* ok = 0, //注(1)
  11. Qt::WindowFlags flags = 0 //指明标准输入对话框的窗口标识
  12. )

注(1):用于指示标准输入对话框的哪个按钮被触发了。若OK为true,则表示用户单击了“OK”(确定)按钮;若OK为false,则表示用户单击了“Cancel”(取消)按钮。

标准double类型输入对话框

  1. double getDouble
  2. (
  3. QWidget* parent, //标准输入对话框的父窗口
  4. const QString& title, //标准输入对话框的标题名
  5. const QString& label, //标准输入对话框的标签提示
  6. double value = 0, //指定标准输入对话框中QSpinBox控件默认的显示值
  7. double min = -2147483647, //指定QSpinBox控件的数值范围
  8. double max = 2147483647, //指定QSpinBox控件的数值范围
  9. int decimals = 1, //指定QSpinBox控件的步进值
  10. bool* ok = 0, //注(1)
  11. Qt::WindowFlags flags = 0 //指明标准输入对话框的窗口标识
  12. )

注(1):用于指示标准输入对话框的哪个按钮被触发,若OK为true,则表示用户单击了“OK”(确定)按钮;若OK为false,则表示用户单击了“Cancel”(取消)按钮。

2、使用示例

  1. void InputDlg::ChangeName()
  2. {
  3. bool ok;
  4. QString text = QInputDialog::getText(this,tr("标准字符串输入对话框"),tr("请输入姓名:"),QLineEdit::Normal,nameLabel2->text(),&ok);
  5. if(ok && !text.isEmpty())
  6. nameLabel2->setText(text);
  7. }
  8. void InputDlg::ChangeSex()
  9. {
  10. QStringList SexItems;
  11. SexItems<<tr("男")<<tr("女");
  12. bool ok;
  13. QString SexItem = QInputDialog::getItem(this,tr("标准条目选择对话框"),tr("请选择性别:"),SexItems,0,false,&ok);
  14. if(ok && !SexItem.isEmpty())
  15. sexLabel2->setText(SexItem);
  16. }
  17. void InputDlg::ChangeAge()
  18. {
  19. bool ok;
  20. int age = QInputDialog::getInt(this,tr("标准int类型输入对话框"),tr("请输入年龄:"),ageLabel2->text().toInt(&ok),0,100,1,&ok);
  21. if(ok)
  22. ageLabel2->setText(QString(tr("%1")).arg(age));
  23. }
  24. void InputDlg::ChangeScore()
  25. {
  26. bool ok;
  27. double score = QInputDialog::getDouble(this,tr("标准double类型输入对话框"),tr("请输入成绩:"),scoreLabel2->text().toDouble(&ok),0,100,1,&ok);
  28. if(ok)
  29. scoreLabel2->setText(QString(tr("%1")).arg(score));
  30. }

3、运行结果

 

 

 

 

五、标准消息对话框

1、函数原型说明

Question消息框

  1. StandardButton QMessage::question
  2. (
  3. QWidget* parent, //消息框的父窗口指针
  4. const QString& title, //消息框的标题栏
  5. const QString& text, //消息框的文字提示信息
  6. StandardButtons buttons = ok, //注(1
  7. StandardButton defaultButton = NoButton //注(2
  8. )

注(1):填写希望在消息框中出现的按钮,可根据需要在标准按钮中选择,用​​|​​连写,默认为QMessageBox::Ok。QMessageBox类提供了许多标准按钮,如QMessageBox::Ok、QMessageBox::Close、QMessage::Discard等。虽然在此可以选择,但并不是随意选择的,应注意按常规成对出现。例如,通常Sava与Discard成对出现,而Abort、Retry、Ignore则一起出现。

注(2):默认按钮,即消息框出现时,焦点默认处于哪个按钮上。

Information消息框

  1. StandardButton QMessage::information
  2. (
  3. QWidget* parent, //消息框的父窗口指针
  4. const QString& title, //消息框的标题栏
  5. const QString& text, //消息框的文字提示信息
  6. StandardButtons buttons = ok, //同Question消息框的注释内容
  7. StandardButton defaultButton = NoButton //同Question消息框的注释内容
  8. )

Warning消息框

  1. StandardButton QMessage::warning
  2. (
  3. QWidget* parent, //消息框的父窗口指针
  4. const QString& title, //消息框的标题栏
  5. const QString& text, //消息框的文字提示信息
  6. StandardButtons buttons = ok, //同Question消息框的注释内容
  7. StandardButton defaultButton = NoButton //同Question消息框的注释内容
  8. )

Critical消息框

  1. StandardButton QMessage::critical
  2. (
  3. QWidget* parent, //消息框的父窗口指针
  4. const QString& title, //消息框的标题栏
  5. const QString& text, //消息框的文字提示信息
  6. StandardButtons buttons = ok, //同Question消息框的注释内容
  7. StandardButton defaultButton = NoButton //同Question消息框的注释内容
  8. )

About消息框

  1. StandardButton QMessage::about
  2. (
  3. QWidget* parent, //消息框的父窗口指针
  4. const QString& title, //消息框的标题栏
  5. const QString& text //消息框的文字提示信息
  6. )

About Qt消息框

  1. void QMessageBox::aboutQt
  2. (
  3. QWidget* parent, //消息框的父窗口指针
  4. const QString& title = QString() //消息框的标题栏
  5. )

2、使用示例

  1. void MsgBoxDlg::showQuestionMsg()
  2. {
  3. label->setText(tr("Question Message Box"));
  4. switch (QMessageBox::question(this,tr("Question消息框"),tr("您现在已经修改完成,是否要接收程序?"),
  5. QMessageBox::Ok |QMessageBox::Cancel),QMessageBox::Ok)
  6. {
  7. case QMessageBox::Ok:
  8. label->setText(tr("Question Button/OK"));
  9. break;
  10. case QMessageBox::Cancel:
  11. label->setText(tr("Question Button/Cancel"));
  12. break;
  13. default:
  14. break;
  15. }
  16. return;
  17. }
  18. void MsgBoxDlg::showInformationMsg()
  19. {
  20. label->setText(tr("Information Message Box"));
  21. QMessageBox::information(this,tr("Information 消息框"),
  22. tr("这是Information消息框测试,欢迎您!"));
  23. return;
  24. }
  25. void MsgBoxDlg::showWarningMsg()
  26. {
  27. label->setText(tr("Warning Message Box"));
  28. switch (QMessageBox::warning(this,tr("Warning 消息框"),
  29. tr("您修改的内容还未保存,是否要保存对文档的修改?"),
  30. QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
  31. QMessageBox::Save))
  32. {
  33. case QMessageBox::Save:
  34. label->setText(tr("Warning Button/Sava"));
  35. break;
  36. case QMessageBox::Discard:
  37. label->setText(tr("Warning Button/Discard"));
  38. break;
  39. case QMessageBox::Cancel:
  40. label->setText(tr("Warning Button/Cancel"));
  41. break;
  42. default:
  43. break;
  44. }
  45. return;
  46. }
  47. void MsgBoxDlg::showCriticalMsg()
  48. {
  49. label->setText(tr("Critical Message Box"));
  50. QMessageBox::critical(this,tr("Critical 消息框"),
  51. tr("这是Critical消息框测试!"));
  52. return;
  53. }
  54. void MsgBoxDlg::showAboutMsg()
  55. {
  56. label->setText(tr("About Message Box"));
  57. QMessageBox::about(this,tr("About 消息框"),
  58. tr("这是About消息框测试!"));
  59. return;
  60. }
  61. void MsgBoxDlg::showAboutQtMsg()
  62. {
  63. label->setText(tr("About Qt Message Box"));
  64. QMessageBox::aboutQt(this,tr("About Qt 消息框"));
  65. return;
  66. }

3、运行结果

 

 

 

 

 

 

六、自定义消息框

代码如下:

  1. void Dialog::showCustomDlg()
  2. {
  3. label->setText(tr("Custom Message Box"));
  4. QMessageBox customMsgBox;
  5. customMsgBox.setWindowTitle(tr("用户自定义消息框"));
  6. QPushButton *yesBtn = customMsgBox.addButton(tr("Yes"),QMessageBox::ActionRole);
  7. QPushButton *noBtn = customMsgBox.addButton(tr("No"),QMessageBox::ActionRole);
  8. QPushButton *cancelBtn = customMsgBox.addButton(QMessageBox::Cancel);
  9. customMsgBox.setText(tr("这是一个用户自定义消息框"));
  10. customMsgBox.setIconPixmap(QPixmap("321.png"));
  11. customMsgBox.exec();
  12. if(customMsgBox.clickedButton()==yesBtn)
  13. label->setText(tr("Custom Message Box/Yes"));
  14. if(customMsgBox.clickedButton()==noBtn)
  15. label->setText(tr("Custom Message Box/No"));
  16. if(customMsgBox.clickedButton()==cancelBtn)
  17. label->setText(tr("Custom Message Box/Cancel"));
  18. }

运行结果:

  进群领取qt开发学习资料以及技术交流  在下方↓↓↓↓↓↓↓↓

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/992317
推荐阅读
相关标签
  

闽ICP备14008679号