Кажется, что когда я помещаю 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, что не является ожидаемым результатом.