2010-04-20 89 views
2

我正在使用Qt for Symbian。我從QMenu打開QDialog時遇到了一些問題。 QDialog顯示正常,並在QDialog中我有一個QDialogBu​​ttonBox用一個按鈕來關閉QDialog。但是如果我關閉QDialog,然後再次從QMenu中打開它,它會顯示出來,但QDialogBu​​ttonBox中的按鈕不會顯示出來。相反,QMainWindow中的按鈕將顯示,但它們會灰顯。Qt QDialog的問題

如何獲取每次顯示的QDialog按鈕?也許我在設置QDialog時遇到一些問題?我真的不明白我在這裏做錯了什麼。

這不是我使用的很多代碼,你可以自己嘗試。這是我的代碼:

在QMainWindow中我使用以下方法來創建菜單:

QAction *menuButton = new QAction("Menu", this); 
menuButton->setSoftKeyRole(QAction::PositiveSoftKey); 

QMenu *menu = new QMenu(this); 
menuButton->setMenu(menu); 

QAction *popup = new QAction("Show popup",this); 
connect(popup, SIGNAL(triggered()), this, SLOT(showPopup())); 
menu->addAction(popup); 

addAction(menuButton); 

這顯示了QDialog:

void MyMainWindow::showPopup(){ 
TestDialog *test = new TestDialog(this); 
test->setAttribute(Qt::WA_DeleteOnClose); 
test->show(); 
} 

這是TestDialog:

TestDialog::TestDialog(QWidget *parent) 
: QDialog(parent) 
{ 
ui.setupUi(this); 
QDesktopWidget* desktopWidget = QApplication::desktop(); 
QRect rect = desktopWidget->availableGeometry(); 
this->setFixedWidth(rect.width()); 
} 
+0

我沒有Symbian的使用權限,但過去我遇到過對話方面的問題。我會嘗試的一件事是將TestDialog的構造函數更改爲「TestDialog * test = new TestDialog();」請注意構造函數調用中沒有父對象。 通常情況下,如果我想限制主窗口框架內的對話框,我會這樣做。但在Symbian上,我並不認爲這是一個問題。我不會發布這個答案,因爲我無法嘗試。 – 2010-04-21 00:42:15

+0

我習慣於在對話框中調用exec,當我希望它們彈出並互動時。節目應該可以工作,但exec可能值得去嘗試。 – 0xbaadf00d 2011-04-07 09:03:13

回答

0

如果你希望你的對話框是模態的,使用exec()。否則,你應該使用show()和raise()來使它在最上面。