我有一个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中给出了父级。
有人可以帮忙吗?
先谢谢
答案 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");