我注意到一个有趣的事情-如果我添加一个详细的文本到QMessageBox(它添加了"显示详细信息…"按钮),然后执行它将显示系统框架的关闭(X)按钮被禁用,因此将此窗口标记为不可关闭(右键单击框架->关闭禁用)。
下面是一些示例代码:QMessageBox box(QMessageBox::Critical, title, text, QMessageBox::Ok);
box.setDetailedText(detailedText); // comment this line to get close button enabled
box.exec();
我甚至没有找到一种方法来手动做这个Qt。任何想法?
谢谢
我在使用Python 2.7和PySide时遇到了同样的问题。
在这个例子中,红色的关闭按钮按预期工作:
from PySide import QtGui, QtCore
import sys
app = QtGui.QApplication(sys.argv)
message_box = QtGui.QMessageBox()
message_box.setWindowTitle("Close Test")
message_box.setText("Testing whether or not the red X is enabled.")
ret = message_box.exec_()
添加详细文本禁用关闭按钮:
from PySide import QtGui, QtCore
import sys
app = QtGui.QApplication(sys.argv)
message_box = QtGui.QMessageBox()
message_box.setWindowTitle("Close Test")
message_box.setText("Testing whether or not the red X is enabled.")
message_box.setDetailedText("These details disable the close button for some reason.")
ret = message_box.exec_()
标记为解决方案的答案不能解决这个问题。正如您在这个例子中看到的,关闭按钮仍然是禁用的:
from PySide import QtGui, QtCore
import sys
app = QtGui.QApplication(sys.argv)
message_box = QtGui.QMessageBox()
message_box.setWindowTitle("Close Test")
message_box.setText("Testing whether or not the red X is enabled.")
message_box.setDetailedText("These details disable the close button for some reason.")
message_box.setWindowFlags(message_box.windowFlags() & ~QtCore.Qt.WindowCloseButtonHint)
ret = message_box.exec_()
答案是设置标准按钮并同时设置转义按钮:
from PySide import QtGui, QtCore
import sys
app = QtGui.QApplication(sys.argv)
message_box = QtGui.QMessageBox()
message_box.setWindowTitle("Close Test")
message_box.setText("Testing whether or not the red X is enabled.")
message_box.setDetailedText("These details disable the close button for some reason.")
message_box.setStandardButtons(QtGui.QMessageBox.Ok)
message_box.setDefaultButton(QtGui.QMessageBox.Ok)
message_box.setEscapeButton(QtGui.QMessageBox.Ok)
ret = message_box.exec_()
这将恢复所需的关闭按钮行为。
我最近在Qt 4.8 Linux上遇到了这个问题。我发现X是否被禁用取决于我在调用QMessageBox::addButton()时使用的ButtonRole。当所有角色都是ActionRole时,X被禁用——这实际上应该是用于影响对话框的按钮,但不接受或拒绝它。在我的例子中,按钮所做的更准确地描述为AcceptRole或RejectRole。当我将角色更改为具有一个RejectRole和其余的AcceptRole时,X开始工作。当没有一个按钮具有映射到close的角色时,QMessageBox似乎不愿意接受close。
您需要取消Qt::WindowCloseButtonHint部件标志的设置。这样的:
QMessageBox messageBox;
messageBox.setWindowFlags(messageBox.windowFlags() & ~Qt::WindowCloseButtonHint);
您可以取消此标志Qt::WindowSystemMenuHint。
添加一个窗口系统菜单,可能还有一个关闭按钮(例如on)Mac)。如果您需要隐藏或显示关闭按钮,它更便于携带来使用WindowCloseButtonHint
http://qt project.org/doc/qt - 4.8 -/- qt.html # WindowType-enum