Как контролировать приоритет перекрытия виджетов в макете aq [grid]? - PullRequest
0 голосов
/ 27 сентября 2010

Я пытаюсь организовать 2G2 QGridLayout следующим образом:

+-----+-----+
|(1)  |(2)  |
+-----+     |
|(3)  |     |
+-----+-----+

Я хочу иметь возможность расширять (1) программно, занимая весь первый ряд, как показано ниже:

+-----------+
|(1)        |
+-----+-----+
|(3)  |(2)  |
+-----+-----+

На самом деле, я хочу развернуть и свернуть любой виджет в любом направлении.

Я могу сделать это, просто обнаружив, какой виджет находится в ячейке, в которую нужно развернуться.Но проблема в том, что это трудно сделать в любом направлении и при любом размере сетки, потому что мне нужно вернуться к исходной позиции только что развернутого виджета (1), поэтому мне не нужно запоминать позиции,кроме той, которую я расширяю / сжимаю.

Итак, в приведенном выше примере я решил просто развернуть виджет, чтобы он занимал позицию 0,0 с интервалом столбца 2. Это приведет к наложению виджетов,это нормально для меня.Проблема в том, что виджет (1) будет находиться под (2), я думаю, из-за порядка вставки в сетку.Отсюда вопрос: как мне контролировать приоритет перекрытия виджета в QGridLayout?

Спасибо!

Ответы [ 3 ]

1 голос
/ 29 сентября 2010

Я получил ответ на свой вопрос. Решение состоит в том, чтобы вызывать метод lift () для виджета, размер которого я изменяю. Это «изменение размера» на самом деле представляет собой removeWidget из макета и addWidget для макета (снова) с информацией о новых ячейках и диапазонах ячеек. После этого я вызываю метод draw () для виджета, и все.

1 голос
/ 28 сентября 2010

Возможно, вы можете сделать что-то подобное для вас, поэкспериментировав.

alt text

Оба снимка имеют QVBoxLayout с двумя QHBoxLayout в них. Вы должны иметь возможность динамически удалять и добавлять кнопки из одного QHBoxLayout в другой. Вы можете добавить или удалить проставку, чтобы определить, будет ли кнопка занимать всю ширину или нет.

Я понимаю, что это все еще добавляет и удаляет виджеты, но это может быть немного проще, чем макет сетки.

0 голосов
/ 28 сентября 2010

Я не уверен, что это будет делать то, что вы хотите, но, насколько я понимаю, вы хотите изменить размеры ваших трех виджетов так, как вы хотите.

Вы можете попробовать заглянуть в класс QSplitter . Он позволяет вам изменять (вручную или программно) размер ваших виджетов, немного как разделение мировоззрения.

Он действительно прост в использовании и может быть достаточно гибким, чтобы дать вам то, что вы хотите.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...