Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Qt中从父节点查找子节点_C++_Qt_Pyqt_Qt5 - Fatal编程技术网

C++ 在Qt中从父节点查找子节点

C++ 在Qt中从父节点查找子节点,c++,qt,pyqt,qt5,C++,Qt,Pyqt,Qt5,我有一个QTabWidget,在下面代码的帮助下,我正在动态添加tab和toolbutton 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 QWidg

我有一个QTabWidget,在下面代码的帮助下,我正在动态添加tab和toolbutton

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;
    }
}
for(tabCount=0;tabCountcount();tabCount++)
{
QWidget*tab=m_tabWidget->widget(tabCount);
QList-widgetList=tab->findChildren();
foreach(QWidget*widgetPtr、widgetList)
{

qDebug()通过将
widget
设置为选项卡栏的选项卡按钮,选项卡栏将获得
widget
的所有权。因此,您的工具按钮将不再是
m\u addNewTab
的任何类型的子项。要查找这些按钮,您必须搜索选项卡栏的子项:

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

您可能需要将
小部件添加到选项卡的
m_addNewGridLayout
布局。我已尝试将m_horizontalLayout添加到m_addNewGridLayout。添加以下语句后,它不起作用。m_addNewGridLayout->addLayout(m_horizontalLayout,0,0,1,1);不工作?错误是什么?您需要将布局添加到不同的行/列。请使用
m_addNewGridLayout->addLayout(m_horizontalLayout,1,0,1,1);
。从qDebug仅打印“QWebView”对象的意义上看,不工作。根据您的建议,我已尝试添加m_addNewGridLayout->addLayout(m_horizontalLayout,1,0,1,1);但它会打印不同选项卡中可用的所有“QWebView”对象。它也不会打印所需的QToolButton对象。
    QToolButton *tb = new QToolButton(widget);
    tb->setObjectName("TB");
    QToolButton *tb1 = new QToolButton(widget);
    tb1->setObjectName("TB1");