2012-09-08 73 views
2

我有一個應用程序,我想問用戶在QMessageBox中的問題,然後做出相應的響應。問題是,在Mac上,我希望對話框顯示爲工作表,但使用open()方法會立即返回。Mac上的Qt :: Sheet和QMessageBox :: show()

QMessageBox* msgBox = new QMessageBox(
    QMessageBox::Question, 
    "Delete Record?", 
    "Are you sure you want to delete this record?" 
    QMessageBox::Yes | QMessageBox::No, 
    this, 
    Qt::Sheet); 

int ret = msgBox->exec(); // does not show up as a sheet on Mac 
msgBox->open(); // shows up as a sheet but returns immediately 

有反正我能得到哪些按鈕,用戶在板壓制而成,而無需實現自己的QDialogmsgBox我有連接嗎?

回答

0

這是我的應用程序PyQt的樣本,但你會得到的想法:

reply = QtGui.QMessageBox.question(self, 'Delete', 
      "Are you sure?", QtGui.QMessageBox.Yes | 
       QtGui.QMessageBox.No, QtGui.QMessageBox.No) 
    if reply == QtGui.QMessageBox.Yes: 
     #some action if YES clicked 
+1

感謝您的回覆,但這不能回答我的問題。使用靜態方法question()在Mac上顯示一個模態對話框(就像它在Windows上那樣),我想顯示一張表。 – Addy

4

使用setWindowModality()不是文檔recommends。以下代碼適用於我:

auto m = new QMessageBox(&window); 
m->setText("some text here"); 
m->setWindowModality(Qt::WindowModal); 
m->exec(); 
+0

是的,它爲我做了詭計,感謝分享 – koda

+0

但是exec()會讓它成爲「應用程序模式」,也就是說,應用程序的其他窗口都不能接收事件。如果你真的想在其他窗口接收事件,那麼因爲QMessageBox是一個QDialog,你可以連接到QDialog的信號,然後調用open()。 – bootchk