在Qt中查找来自父节点的子节点

时间:2015-12-07 11:34:57

标签: c++ qt pyqt qt5

我有一个QTabWidget,我在下面的代码的帮助下动态添加标签和工具按钮。

QTabWidget *m_tabWidget = new QTabWidget(this);
m_addNewTab = new QWidget(m_tabWidget);
m_addNewGridLayout = new QGridLayout(m_addNewTab);
m_addNewWebView = new QWebView(m_addNewTab);

widget = new QWidget(m_addNewTab);
tb = new QToolButton(widget);
tb1 = new QToolButton(widget);

m_horizontalLayout = new QHBoxLayout(widget);
m_horizontalLayout->addWidget(tb);
m_horizontalLayout->addWidget(tb1);

m_addNewGridLayout->addWidget(m_addNewWebView, 0, 0, 1, 1);
m_tabWidget->addTab(m_addNewTab, QString());

动态添加3-4个标签后,我想只获得QToolButton对象。 我使用下面的代码来查找父窗口小部件的子项。

for (tabCount = 0;tabCount < m_tabWidget->count();tabCount++)
{
    QWidget *tab = m_tabWidget->widget(tabCount);
    QList<QWidget*> widgetList = tab->findChildren<QWidget*>();
    foreach( QWidget* widgetPtr, widgetList )
    {
        qDebug() << "Child Widget" << widgetPtr;
    }
}

上面的代码只打印“QWebView”指针。为什么不用QToolButton对象?正如我们在QToolButton中给出了父级。

有人可以帮忙吗?

先谢谢

1 个答案:

答案 0 :(得分:1)

通过将widget设置为标签栏的标签按钮,标签栏将占用widget的所有权。因此,您的工具按钮将不再是m_addNewTab的任何类型的子项。要找到这些按钮,您必须搜索标签栏的子项:

    QList<QWidget*> widgetList = m_tabWidget->tabBar()->findChildren<QWidget*>();

为了使搜索更容易,请将一些对象名称设置为工具按钮:

    QToolButton *tb = new QToolButton(widget);
    tb->setObjectName("TB");
    QToolButton *tb1 = new QToolButton(widget);
    tb1->setObjectName("TB1");