当前位置:   article > 正文

嵌入式Qt 对话框及其类型 QDialog

嵌入式Qt 对话框及其类型 QDialog

一.对话框的概念

对话框是与用户进行简短交互的顶层窗口。

QDialog是Qt中所有对话框窗口的基类。

QDialog继承与QWidfet是一种容器类型的组件。

 QDialog的意义:

QDialog作为一种专业的交互窗口而存在。

QDialog不能作为子部部件嵌入其他容器中。

QDialog是定制了窗口式样的特殊的QWidget

二.对话框的类型

模态对话框(QDialog::exec())

- 显示后无法与父窗口进行交互

- 是一种阻塞式的对话框调用方式

非模式对话框(QDialog::show)

- 显示后独立存在可以同时与父窗口进行交互

- 是一种非阻塞式的对话框调用方式。

三.对话框程序设计

main:

  1. #include <QtGui/QApplication>
  2. #include <QWidget>
  3. #include <QDialog>
  4. #include <QDebug>
  5. #include "Dialog.h"
  6. int main(int argc, char *argv[])
  7. {
  8. QApplication a(argc, argv);
  9. Dialog dlg;
  10. int r = dlg.exec();
  11. if( r == QDialog::Accepted )
  12. {
  13. qDebug() << "Accepted";
  14. }
  15. else if( r == QDialog::Rejected )
  16. {
  17. qDebug() << "Rejected";
  18. }
  19. else
  20. {
  21. qDebug() << r;
  22. }
  23. return r;
  24. }

Dialog.c

  1. #include "Dialog.h"
  2. #include <QDebug>
  3. Dialog::Dialog(QWidget *parent) :
  4. QDialog(parent), ModalBtn(this), NormalBtn(this), MixedBtn(this)
  5. {
  6. ModalBtn.setText("Modal Dialog");
  7. ModalBtn.move(20, 20);
  8. ModalBtn.resize(100, 30);
  9. NormalBtn.setText("Normal Dialog");
  10. NormalBtn.move(20, 70);
  11. NormalBtn.resize(100, 30);
  12. MixedBtn.setText("Mixed Dialog");
  13. MixedBtn.move(20, 120);
  14. MixedBtn.resize(100, 30);
  15. connect(&ModalBtn, SIGNAL(clicked()), this, SLOT(ModalBtn_Clicked()));
  16. connect(&NormalBtn, SIGNAL(clicked()), this, SLOT(NormalBtn_Clicked()));
  17. connect(&MixedBtn, SIGNAL(clicked()), this, SLOT(MixedBtn_Clicked()));
  18. resize(140, 170);
  19. }
  20. void Dialog::ModalBtn_Clicked()
  21. {
  22. qDebug() << "ModalBtn_Clicked() Begin";
  23. QDialog dialog(this);
  24. dialog.exec(); //阻塞式调用
  25. // done(Accepted);
  26. qDebug() << "ModalBtn_Clicked() End";
  27. }
  28. void Dialog::NormalBtn_Clicked()
  29. {
  30. qDebug() << "NormalBtn_Clicked() Begin";
  31. QDialog* dialog = new QDialog(this);
  32. dialog->setAttribute(Qt::WA_DeleteOnClose);
  33. dialog->show();
  34. // done(Rejected);
  35. qDebug() << "NormalBtn_Clicked() End";
  36. }
  37. void Dialog::MixedBtn_Clicked()
  38. {
  39. qDebug() << "MixedBtn_Clicked() Begin";
  40. QDialog* dialog = new QDialog(this);
  41. dialog->setAttribute(Qt::WA_DeleteOnClose);
  42. dialog->setModal(true);
  43. dialog->show();
  44. // done(100);
  45. qDebug() << "MixedBtn_Clicked() End";
  46. }
  47. Dialog::~Dialog()
  48. {
  49. qDebug() << "~Dialog()";
  50. }

Dialog.h

  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QtGui/QDialog>
  4. #include <QPushButton>
  5. class Dialog : public QDialog
  6. {
  7. Q_OBJECT
  8. protected:
  9. QPushButton ModalBtn;
  10. QPushButton NormalBtn;
  11. QPushButton MixedBtn;
  12. protected slots:
  13. void ModalBtn_Clicked();
  14. void NormalBtn_Clicked();
  15. void MixedBtn_Clicked();
  16. public:
  17. Dialog(QWidget *parent = 0);
  18. ~Dialog();
  19. };
  20. #endif // DIALOG_H

Dialog::ModalBtn_Clicked()为阻塞式调用,程序会一直卡在ModalBtn_Clicked() Begin,只有将对话框关闭,程序还会继续向下运行,ModalBtn_Clicked() End才会打印。

Dialog::NormalBtn_Clicked()为非阻塞式调用,程序会一直运行,NormalBtn_Clicked() Begin,NormalBtn_Clicked() End,会连续打印,但还是不能和其他窗口进行交互。

小结:

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

闽ICP备14008679号