gpt4 book ai didi

qt - 如何在 Qt 5 中使用 QMessageBox?

转载 作者:行者123 更新时间:2023-12-04 18:33:47 26 4
gpt4 key购买 nike

所以我正在用 Qt 5.2.1 编写程序。我需要的是,当用户单击一个按钮时,会出现一个警告,如果用户单击“确定”,则程序继续,如果他单击“取消”,则什么也不会发生。

我该怎么做?我是 Qt 的新手。

最佳答案

这是一个sscce方法来做到这一点。我努力使它尽可能正确和最小化。我注意了以下几点:

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

  2. 使用标准按钮。

  3. 提供文本和信息性文本以符合跨平台的人机界面指南。

  4. 消息框的模态是根据我们的实际需求设置的。它是窗口模态的,可防止与底层窗口交互,但不会与应用程序的其余部分交互。

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

  6. Default member initializers在构造成员时使用。

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

  8. 插槽被赋予描述性名称,以指示它们作用于什么小部件和什么信号。结合给小部件对象名称,这让我们可以利用 connectSlotsByName 机制。它还简化了调试,因为调试助手让我们在调试 Qt 应用程序时看到对象名称。

附言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"

关于qt - 如何在 Qt 5 中使用 QMessageBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22377603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com