当findChild不起作用时,如何使用提升的类从其他窗口小部件获取窗口小部件

时间:2011-12-21 08:26:29

标签: qt widget

我有一些简单的小部件层次结构 看起来像这样:

MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(423, 479);
        MainWindow->setLayoutDirection(Qt::LeftToRight);
        MainWindow->setLocale(QLocale(QLocale::English, QLocale::UnitedStates));
        centralwidget = new QWidget(MainWindow);
        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
        horizontalLayout = new QHBoxLayout(centralwidget);
        horizontalLayout->setSpacing(0);
        horizontalLayout->setContentsMargins(0, 0, 0, 0);
        horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
        StreamViewWidget = new StreamView(centralwidget);
        StreamViewWidget->setObjectName(QString::fromUtf8("StreamViewWidget"));
        horizontalLayout_2 = new QHBoxLayout(StreamViewWidget);
        horizontalLayout_2->setSpacing(0);
        horizontalLayout_2->setContentsMargins(0, 0, 0, 0);
        horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
        streamList = new StreamList(StreamViewWidget);
        streamList->setObjectName(QString::fromUtf8("streamList"));
        streamList->setStyleSheet(QString::fromUtf8("background-color: rgb(171, 251, 255);"));

        horizontalLayout_2->addWidget(streamList);


        horizontalLayout->addWidget(StreamViewWidget);

        MainWindow->setCentralWidget(centralwidget);
        menubar = new QMenuBar(MainWindow);
        menubar->setObjectName(QString::fromUtf8("menubar"));
        menubar->setGeometry(QRect(0, 0, 423, 22));
        MainWindow->setMenuBar(menubar);
        statusbar = new QStatusBar(MainWindow);
        statusbar->setObjectName(QString::fromUtf8("statusbar"));
        MainWindow->setStatusBar(statusbar);

现在StreamViewWidget和streamList;晋升,我在那里上课 现在从StreamViewWidget我想要访问streamList。 所以我尝试这样做,但它失败了,我得到空的结果。

StreamView::StreamView(QWidget *parent) :QWidget(parent)
{
 pStreamList = this->findChild<StreamList*>("streamList");
 QList<StreamList *> widgets = this->findChildren<StreamList *>("streamList");

}

当我在StreamView中执行QObject :: dumpObjectTree() 我得到:所以我猜它不是StreamView的孩子,但我怎么能得到streamList?

QWidget::centralwidget 
    QHBoxLayout::horizontalLayout 
    StreamView:: 

任何想法我在这里做错了什么? 感谢

1 个答案:

答案 0 :(得分:1)

致电时

horizontalLayout_2->addWidget(streamList);

horizontalLayout2成为streamList的父级。 horizontalLayout2的父级为StreamViewWidgetStreamViewWidget不是streamList的父级。这有道理吗?

但除此之外的一切都是如此。它不起作用的原因可能是因为你试图找到一个尚不存在的小部件的子代。你是StreamView的构造函数,还记得吗?