Qt - Добавление динамических элементов управления в заполнитель - PullRequest
0 голосов
/ 06 декабря 2010

Я ищу лучший способ динамически менять и заменять элементы управления в Qt на предопределенном макете, созданном из Qt Designer.

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

Поддерживает ли Qt этот тип функциональности или что-то подобное?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2010

Если ваш Qt Layout уже использует макеты, то лучше всего было бы оставить какое-то место для элементов управления во время выполнения в дереве макетов или, возможно, даже пустой макет только для них. Макеты имеют возможность динамически добавлять или удалять виджеты и вложенные макеты, что решает проблему. Если вы хотите вставить новые виджеты сразу после удаления старых, интерфейс может замигать, так как qt попытается использовать временно освобожденное пространство. Это может замедлить работу приложения, если есть какие-либо медленные виджеты рендеринга.

Другая задача - вставить пустой виджет - это больше похоже на подход ASP.NET. Это немного более грубый метод, но может быть хорошим способом избежать мерцания интерфейса. Это предотвратит повторное использование пространства макетом, даже если вы не отображаете какой-либо виджет и оставляете неиспользуемое пространство - это может означать, что после некоторого взаимодействия здесь может что-то появиться - если это желаемое поведение, я бы предложил этот способ.

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

0 голосов
/ 06 декабря 2010

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

for(int i = 0; i < 10; i++)
{
    QLabel *plbl = new QLabel(myform);
    plbl->setText(QLabel::tr(L"My dynamic text box"));
    mylayout->addWidget(plbl);
}

Редактировать: Существуют разные классы макета, которые поддерживают разные стили «заливки» (например, горизонтальный следующийдруг другу, сетка, вертикальное расположение и т. д.).Вам не понадобятся никакие заполнители или аналогичные элементы - просто виджет (или макет) в качестве родителя для заполнения.

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