C++ 在Qt中从父节点查找子节点
我有一个QTabWidget,在下面代码的帮助下,我正在动态添加tab和toolbuttonC++ 在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 *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");