Qt之QDialog

QDialog特性:

  对话框是一个顶级窗口,大多数用于临时任务和短暂交流。QDialog可能是modal或者modeless;QDialog还可以提供一个返回值;QDialog可以提供default buttons;最后QDialog用setSizeGripEnabled()还是可以在低层次中心提供一个QSizeGrip类;

  QDialog或者其他有Qt::Dialog类型的widget(即QWidget::setWindowFlag(Qt::Dialog)这样的)使用父类widget与其他Qt类是不同的,因为对话框经常是一个顶级的widget,但是如果它有parent的话,对话框默认位置将是在顶级widget的中心位置,同时它也将共享parent的taskbar的入口;

  使用QWidget::setParent()将会改变QDialog widget的属性,如果这么设置之后将需要重新指定window-systems窗口属性(尤其是它将复位Qt::Dialog标志位),所以在将QDialog放在其他widget中时需要重新设置Qt::WindowFlags。

(1)  Modal Dialogs

  Modal Dialog可以阻塞其他窗口的输入,Dialogs可以是application modal(默认值)或者是window modal。

  绝大数调用modal dialog的方式是调用exec(),当dialog关闭的时候,exec()将会提供一个返回值。为了得到合适的值,一般将OK连接到accep()槽函数,Cancel连接到reject()槽函数。甚至你可以用done()槽函数来选择Accepted或者Rejected。此外还有种方式,就是调用setModal(true)或者setWindowModality(),然后再调用show(),与exec()不同的是show()会立即返回值,exec()只有在DIalog关闭后才会返回。但是这种方式对于长时间运行的过程式dialog是非常有用的,如果调用show()和setModal(true)来执行长时间的动作,还必须使用QApplication::processEvents()让dialog与使用者持续对话。

(2)  Modaless Dialogs

  如果在hide()之后调用show()函数,dialog将会出现在最开始的位置。如果想维持之前的位置,需要在closeEvent()中保存框体的坐标,然后move()去,之后再调用show()。

(3)  default button

  默认按钮用来告知用户已接受dialog的设置,并且希望关闭dialog,使用QPushbutton::setDefault(),QPushButton::isDefault()和QPushButton::autoDefault()来设置和控制默认按钮。

你可能感兴趣的:(Qt学习总结)