如何在QT 5中使用QmessageBox

  • 本文关键字:QmessageBox QT qt qt5
  • 更新时间 :
  • 英文 :


,所以我正在qt 5.2.1中制作一个程序。我需要的是,当用户单击按钮时,会出现警告,如果用户单击"确定",则继续程序,如果他单击"取消",则什么都不会发生。

我该怎么做?我是QT的全新者。

这是做到这一点的一种SSCCE方法。我一直在努力使其尽可能正确和最小。我关注以下内容:

  1. 阻止事件循环重新进入的方法必然是错误的来源,因此不应使用。因此,我们不使用QMessageBox::exec()

  2. 使用标准按钮。

  3. 提供了文本和信息性文本,以符合平台之间的人类界面准则。

  4. 消息框的模式是根据我们的实际要求设置的。它是窗口模式,可防止与基础窗口相互作用,但与应用程序的其余部分没有。

  5. 儿童小部件是常规成员,并且不是直接分配在堆上。这使内存管理变得更加容易,并利用了RAII。在内部,他们将无论如何都会分配他们的pimpls。

  6. 构造成员时使用默认成员初始化器。

  7. 添加到布局的小部件是不是传递了父的。这样做将是多余的。

  8. 插槽具有描述性名称,这些名称既指示他们作用的小部件和信号。结合给出小部件对象名称,这使我们能够利用connectSlotsByName机制。它还可以简化调试,因为调试助手让我们在调试QT应用程序时查看对象名称。

P.S。QDrag,我正在给您凝视。你知道,凝视

// main.cpp
#include <QtGlobal>
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
#include <QtGui>
#else
#include <QtWidgets>
#endif
class MyUi : public QWidget {
   Q_OBJECT
   QBoxLayout m_layout{QBoxLayout::TopToBottom, this};
   QLabel m_label;
   QPushButton m_button{"Change Message"};
   QMessageBox m_warning{QMessageBox::Warning, "Message Change",
                         "The message will change.",
                         QMessageBox::Yes | QMessageBox::No,
                         this},
   Q_SLOT void on_button_clicked() {
      m_warning.show();
   }
   Q_SLOT void on_warning_finished(int rc) {
      // The `finished()` signal is emitted with a
      // QDialogButtonBox::StandardButton value - the same that would
      // be retuned by QMessageBox::exec().
      // A QMessageBox does *not*  accept the dialog,
      // so we can't simply use the `accepted` signal.
      if (rc != QDialogButtonBox::Yes) return;
      m_label.setText(m_label.text() + "*v*");
   }
public:
   MyUi(QWidget * parent = {}) : QWidget(parent) {
      m_button.setObjectName("button");
      m_warning.setObjectName("warning");
      m_warning.setWindowModality(Qt::WindowModal);
      m_warning.setInformativeText(
               "Are you sure you want the message to change?");
      m_layout.addWidget(&m_label);
      m_layout.addWidget(&m_button);
      QMetaObject::connectSlotsByName(this);
   }
};
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   MyUi ui;
   ui.show();
   return a.exec();
}
#include "main.moc"

相关内容

  • 没有找到相关文章

最新更新