c++ - 在Qt中从父节点中查找子节点

标签 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 中给父项一样。

有人可以帮忙吗?

提前致谢

最佳答案

通过将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");

关于c++ - 在Qt中从父节点中查找子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34132610/

相关文章:

c++ - 使用 CDT for C++ 在 Eclipse 中重命名类的更舒适方式?

c++ - 警告 "C++ requires a type specifier for all declaration"图

c++ - visual c++ 未声明的标识符

multithreading - 如何实现线程的频繁启动/停止(QThread)

c++ - 使用列中的组合框编辑 QTableView

c++ - 如何控制两个线程访问同一个共享数据的执行顺序

c++ - Qt中正确的线程方式

python - QTabWidget 不允许我使用自定义类

python - PyQtGraph PlotWidget 在关闭窗口时使应用程序崩溃

python - QDialog.show()方法有延迟 react