2010-05-12 2 views
0

Jusqu'ici, je n'avais que ma fenêtre principale qui affichait d'autres fenêtres qui étaient des QDialogs et je n'arrive pas à l'utiliser avec un QWidget. L'autre fenêtre que je veux afficher a été conçue avec l'éditeur de formulaires, puis enveloppée dans une classe appelée ResultViewer qui étend QWidget (par opposition à QDialog). Ce que je veux, c'est que ResultViewer montre son ui dans une fenêtre séparée. Maintenant, quand j'essaie de l'afficher, l'ui ResultViewer apparaît dans la fenêtre principale en haut de l'interface utilisateur de MainWindow.Comment faire apparaître une autre fenêtre qui étend QWidget par rapport à QDialog?

Le code que je utilise pour l'afficher est ceci (dans mon dossier mainwindow.cpp)

ResultViewer * rv = new ResultView(this); 
rv->show(); 

Le constructeur de la ResultViewer ressemble à ceci

ResultViewer::ResultViewer(QWidget * parent) : 
    QWidget(parent), 
    ui(new Ui::ResultViewer) 
{ 
    ui->setupUi(this); 
} 

Je l'ai regardé à travers la documentation QWidget un peu mais la seule chose que je peux trouver qui puisse être liée est la fonction QWidget::window(), mais l'explication n'est pas très claire, elle donne juste un exemple de changement du titre d'une fenêtre.

Répondre

3

Si vous voulez juste montrer deuxième fenêtre dans votre application et ont deux widgets de haut niveau tentent de changer:

ResultViewer * rv = new ResultView(this); 
rv->show(); 

à

ResultViewer * rv = new ResultView(); 
rv->show(); 

Jetez un oeil sur la documentation du constructeur QWidget http://doc.trolltech.com/4.6/qwidget.html#QWidget comprendre pourquoi cela devrait être fait de cette manière. Par ailleurs, QDialog est vraiment une bonne classe de base pour des fenêtres supplémentaires dans votre application. Je ne comprends pas pourquoi tu ne veux pas l'utiliser.

+0

Merci VestniK, en regardant plus loin, je pense que je peux effectivement passer à QDialog. A l'origine je ne voulais pas l'utiliser car ils bloquent normalement la fenêtre principale pendant qu'ils sont ouverts mais apparemment cela est facilement changé. –

+1

Les dialods peuvent être modaux et non modaux. Si vous utilisez QDialog :: show() (en fait cette fonction héritée de QWidget) c'est non modal (ne pas bloquer votre fenêtre principale) si vous utilisez QDialog :: exec() votre boîte de dialogue est modale (bloque votre fenêtre principale). – VestniK

Questions connexes