📜  qt 弹出窗口 - C++ (1)

📅  最后修改于: 2023-12-03 15:34:34.380000             🧑  作者: Mango

Qt 弹出窗口 - C++

在 Qt 中,弹出窗口是一个非常常见的需求,可以通过 QMessageBox 类实现。该类提供了多种弹出窗口的风格,例如信息框、警告框、错误框、问题框等。

显示信息框

信息框用于显示一些信息,例如操作成功、保存成功等提示。可以通过以下代码实现:

QMessageBox::information(parent, "Title", "Message");
  • parent: 父窗口,可以为 nullptr
  • "Title": 弹出窗口的标题。
  • "Message": 弹出窗口的信息。
显示警告框

警告框用于警示用户操作可能会导致的问题,例如未保存数据就关闭。可以通过以下代码实现:

QMessageBox::warning(parent, "Title", "Message");
  • parent: 父窗口,可以为 nullptr
  • "Title": 弹出窗口的标题。
  • "Message": 弹出窗口的信息。
显示错误框

错误框用于显示错误信息,例如文件读取失败。可以通过以下代码实现:

QMessageBox::critical(parent, "Title", "Message");
  • parent: 父窗口,可以为 nullptr
  • "Title": 弹出窗口的标题。
  • "Message": 弹出窗口的信息。
显示问题框

问题框用于询问用户操作是否继续执行,例如是否保存修改。可以通过以下代码实现:

QMessageBox::question(parent, "Title", "Message", QMessageBox::Yes | QMessageBox::No);
  • parent: 父窗口,可以为 nullptr
  • "Title": 弹出窗口的标题。
  • "Message": 弹出窗口的信息。
  • QMessageBox::Yes | QMessageBox::No: 弹出窗口的按钮,可以改为其他值,例如 QMessageBox::Ok | QMessageBox::Cancel
自定义按钮

以上四种方式的按钮都是默认的,如果需要自定义按钮,可以通过 QMessageBox::addButton() 方法实现。例如:

QMessageBox msgBox;
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
QPushButton *dontSaveButton = msgBox.addButton(tr("Don't Save"), QMessageBox::NoRole);
msgBox.exec();
if (msgBox.clickedButton() == QMessageBox::Save) {
    // Save was clicked
} else if (msgBox.clickedButton() == QMessageBox::Discard) {
    // Don't Save was clicked
} else if (msgBox.clickedButton() == dontSaveButton) {
    // Cancel was clicked
}

以上代码创建了一个自定义的弹出窗口,包含保存、丢弃和取消三个按钮,以及一个 "Don't Save" 按钮,不同的按钮对应不同的操作。