【问题标题】:Qt findChildren() function only return first child objectQt findChildren() 函数只返回第一个子对象
【发布时间】:2020-09-24 08:54:02
【问题描述】:

我遇到了QDockWidgetQMainWindow 的问题,我在主窗口中添加了三个dockwidgets 并将它们标签化。为了自定义这些tabbars,使用QMainWindow::findChildren()函数来获取tabbars的指针。但是返回结果只给了我列表中的第一个标签栏指针。

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"

【问题讨论】:

  • 首先请发布实际代码,而不是截图。其次 - 您提供的小代码中只有一个标签栏。 QObject::findChildren()options 参数默认设置为 Qt::FindChildrenRecursively,所以如果你有更多,它会更多。
  • @rbaleksandar 非常感谢,我看到了错误,我对 QTabBar 和 Tab 有一些误解,再次感谢
  • 不客气。将其发布为答案,因为它已根据我的理解澄清了您的问题。另外,请编辑您的问题并发布屏幕截图中的代码和调试输出,以便采用更可接受的格式。
  • @rbaleksandar 我看到格式问题,这是我在这个网站上的第一个问题,从现在开始我会做正确的

标签: qt qobject qdockwidget


【解决方案1】:

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

一般你有以下几种情况:

  • 标签栏包含标签
  • 每个选项卡都代表一个停靠的小部件

【讨论】:

    猜你喜欢
    • 2020-11-20
    • 2011-11-05
    • 2022-11-15
    • 2018-10-05
    • 1970-01-01
    • 2011-10-10
    • 2017-12-05
    相关资源
    最近更新 更多