Qt findChild retour 0
Je suis actuellement en train de travailler sur une belle façon d'utiliser une interface graphique pour modifier l'objet contenu au moment de l'exécution, le projet utilise Qt.
Alors j'ai pensé à passer un QLayout
pour les objets, pour leur permettre de créer leur propre interface utilisateur. Comme POC, j'ai créé ce ("display" est le nom de la QVBoxLayout*
paramètre):
QPushButton* button = new QPushButton();
button->setText("foo");
button->setObjectName("bar");
display->addWidget(button);
qui fonctionne tout aussi beaux que prévu. Mais j'ai besoin de lire ce que l'utilisateur a tapé dans l'interface graphique, donc c'est ce que j'ai fait suivant:
QPushButton *button2 = display->findChild<QPushButton *>();
if(button2)
std::cout << button2->objectName().toStdString() << std::endl;
ici rien n'est mis hors - si() l'énoncé est faux!
QList<QWidget *> widgets = display->findChildren<QWidget *>();
foreach (QWidget* b, widgets) {
std::cout << b->objectName().toStdString() << std::endl;
}
de même, la widgets
liste est vide.
J'ai essayé de regarder à travers la liste des membres à: http://doc.qt.digia.com/qt/qvboxlayout-members.html, mais findChild/findChildren semble le mieux adapté à mes besoins...
SOLUTION CI-DESSOUS
C'est comment je gère maintenant:
au lieu de passer un QVBoxLayout
à l'interface graphique de création, un QWidget
devrait être adopté, à la suite nommé "affichage" comme ci-dessus.
QVBoxLayout* layout = new QVBoxLayout();
display->setLayout(layout);
QPushButton* button = new QPushButton();
button->setText("foo");
button->setObjectName("bar");
layout->addWidget(button);
maintenant à findChild
/findChildren
:
QPushButton *button2 = display->findChild<QPushButton *>("bar");
if(button2)
std::cout << button2->objectName().toStdString() << std::endl;
QList<QWidget *> widgets = display->findChildren<QWidget *>();
foreach (QWidget* b, widgets) {
std::cout << b->objectName().toStdString() << std::endl;
}
les deux méthodes de travail pour moi comme prévu! (Et en Plus, maintenant, la mise en page peut être choisi librement par l'interface graphique de création!)
OriginalL'auteur LDericher | 2012-11-22
Vous devez vous connecter pour publier un commentaire.
Le parent d'un
QWidget
doit être unQWidget
.QLayout
n'est pas unQWidget
.Modèles existent pour se déplacer et redimensionner les enfants d'un
QWidget
. Si vous pouvez ajouter des widgets enfants en faisant des appels de la mise en page, en fin de compte, leurs parents sera leQWidget
que la mise en page réside.Pour illustrer:
De sortie:
OriginalL'auteur cgmb