Qt findChildren()函数仅返回第一个子对象

问题描述 投票:1回答:1

我遇到了QDockWidgetQMainWindow的麻烦,我在主窗口中添加了三个ockockwid,然后将它们制成表格。为了自定义这些标签栏,使用QMainWindow::findChildren()函数获取标签栏的指针。但是返回结果只给我列表中的第一个标签栏指针。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QWidget* widCenter =this->takeCentralWidget();
    if(widCenter)
    {
        delete widCenter;
        widCenter = nullptr;
    }
    MyDockWidget* m1 = new MyDockWidget(this);
    MyDockWidget* m2 = new MyDockWidget(this);
    MyDockWidget* m3 = new MyDockWidget(this);
    m1->setWindowTitle("m1");
    m2->setWindowTitle("m2");
    m3->setWindowTitle("m3");

    this->setDockOptions(QMainWindow::AllowTabbedDocks);
    this->addDockWidget(Qt::TopDockWidgetArea, m1);
    this->addDockWidget(Qt::TopDockWidgetArea, m2);
    this->addDockWidget(Qt::TopDockWidgetArea, m3);

    //this->splitDockWidget(m1, m2, Qt::Horizontal);
    this->tabifyDockWidget(m1, m2);
    this->tabifyDockWidget(m2, m3);
    this->setTabPosition(Qt::TopDockWidgetArea, QTabWidget::North);

     m_list=this->findChildren<QTabBar*>(QString(), Qt::FindChildrenRecursively);
     qDebug() << "size = "<<m_list.size();
     if(m_list.size() > 0)
     {
         qDebug() << "text = "<< m_list[0]->tabText(0);
         qDebug() << "text = "<< m_list[0]->tabText(1);
         qDebug() << "text = "<< m_list[0]->tabText(2);
     }
}

和调试结果:

size = 1
text = "m1"
qt qobject qdockwidget
1个回答
0
投票

您提供的小代码中确实只有一个标签栏。 QObject::findChildren()的options参数默认设置为Qt::FindChildrenRecursively,因此,如果您有更多的话,它的计数就会更多。

一般来说,您有以下情况:

  • 标签栏包含标签
  • 每个选项卡代表一个停靠的小部件
© www.soinside.com 2019 - 2024. All rights reserved.