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