2010-04-20 8 views
2

J'utilise Qt pour Symbian. J'ai quelques problèmes avec un QDialog que j'ouvre à partir d'un QMenu. Le QDialog se montre bien et dans le QDialog j'ai un QDialogButtonBox avec un bouton pour fermer le QDialog. MAIS si je ferme le QDialog et l'ouvre de nouveau à partir du QMenu, il apparaîtra mais le bouton du QDialogButtonBox n'apparaîtra pas. Au lieu de cela, les boutons de QMainWindow s'affichent mais ils sont grisés.Problèmes avec QDialog dans Qt

Comment puis-je afficher les boutons QDialog à chaque fois? Peut-être que j'ai quelques problèmes avec la mise au point sur le QDialog? Je ne peux vraiment pas voir ce que je fais mal ici.

Ce n'est pas beaucoup de code que j'utilise, vous pouvez l'essayer vous-même. Voici mon code:

En QMainWindow j'utilise ce qui suit pour créer le menu:

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); 

Cela montre la QDialog:

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

C'est le TestDialog:

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

Je n'ai pas accès à Symbian, mais j'ai eu des problèmes avec les boîtes de dialogue dans le passé. Une des choses que j'essaierais est de changer votre constructeur de TestDialog en "TestDialog * test = new TestDialog();" Notez qu'il n'y a pas d'objet parent dans l'appel du constructeur. Normalement, je le ferais comme vous l'avez fait si je voulais contraindre la boîte de dialogue dans le cadre de la fenêtre principale. Mais sur Symbian, je ne vois pas cela comme un problème. Je ne poste pas cela comme une réponse car je ne peux pas l'essayer. –

+0

J'ai l'habitude d'appeler exec sur des boîtes de dialogue quand je veux qu'elles apparaissent et interagissent. show devrait fonctionner, mais exec pourrait valoir la peine d'essayer. – 0xbaadf00d

Répondre

0

Si vous voulez que votre boîte de dialogue soit modale, utilisez exec(). Sinon, vous devriez utiliser show() et raise() pour faire en sorte qu'il soit au sommet.