QSplitter似乎反向索引内容小部件

当我在QSplitter中放置2帧时,分离器似乎给出了帧的反向索引。

例如:

QSplitter似乎反向索引内容小部件

我在垂直分离器中放置了2帧(frame_A和frame_B)。首先创建Frame_B,然后创建Frame_A。当我不使用QSplitter时,首先检测到Frame_A。

<QSplitter>
  <frame_B>
  <frame_A>
<QSplitter>

如何确保首先创建顶部框架而不是底部框架?

我尝试过的事情

  • 更改框架名称(按字母顺序)。没用
  • 卸下框架,然后按我想要的顺序重新添加。没用。
  • 删除框架并以我想要的相反顺序重新添加它们。没用

确实有用的东西是在添加Splitter之前将顶部列表放到底部,反之亦然,但这确实可行,但是这会使表格相反。

最小可复制示例

Splitter.ui文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QSplitter" name="splitter">
   <property name="geometry">
    <rect>
     <x>45</x>
     <y>40</y>
     <width>261</width>
     <height>166</height>
    </rect>
   </property>
   <property name="orientation">
    <enum>Qt::Vertical</enum>
   </property>
   <widget class="QFrame" name="frame_A">
    <property name="frameShape">
     <enum>QFrame::StyledPanel</enum>
    </property>
    <property name="frameShadow">
     <enum>QFrame::Raised</enum>
    </property>
   </widget>
   <widget class="QFrame" name="frame_B">
    <property name="frameShape">
     <enum>QFrame::StyledPanel</enum>
    </property>
    <property name="frameShadow">
     <enum>QFrame::Raised</enum>
    </property>
   </widget>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

要查找订单,我使用以下代码

static void dumpWidgetRecursion(QTextStream &str,const QWidget *w,int depth = 0)
{
    if (depth)
        str << QString(depth * 2,QLatin1Char(' '));
    const QRect geom = w->geometry();
    str << '"' << w->metaObject()->classname() << "\"/\"" << w->objectname() << "\" "
        << geom
        << (w->isVisible() ? "[visible] " : "[hidden] ");
    if (w->testAttribute(Qt::WA_Mapped))
        str << "[mapped] ";
    str << '\n';
    foreach (QObject *c,w->children()) {
        if (c->isWidgetType())
             dumpWidgetRecursion(str,(const QWidget *)(c),depth + 1);
    }
}

static void dumpAllWidgets()
{
    QString d;
    QTextStream str(&d);
    std::ofstream myfile("dumpallwidgets.txt");

    str << "### QWidgets:\n";
    foreach (const QWidget *w,QApplication::topLevelWidgets())
         dumpWidgetRecursion(str,w);
    myfile << d.toStdString();
}

这将给我以下结果:

"QSplitter"/"splitter" 571x241+140+70[visible] 
          "QFrame"/"frame_B" 571x118+0+123[visible] 
          "QFrame"/"frame_A" 571x118+0+0[visible] 
          "QSplitterHandle"/"qt_splithandle_" 100x30+0+0[hidden] 
          "QSplitterHandle"/"qt_splithandle_" 571x5+0+118[visible]

如您所见,Frame_B在Frame_A之前,这不是我期望的结果。

handSomeSJW 回答:QSplitter似乎反向索引内容小部件

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3165699.html

大家都在问