qt скрывает элемент управления в showEvent () - PullRequest
1 голос
/ 30 сентября 2011

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

Одним из элементов управления является пользовательский элемент управления, который наследуется от QFrame.

Я хочу скрыть этот элемент управления, если установлен определенный флаг. Итак, у меня есть

void MyCustomControl::showEvent ( QShowEvent * /* evt */ )
{
    if (!m_visibleAllowed)
        hide();
} 

Хотя это скрывает контроль, оно делает его тупым; это выглядит замороженным. При изменении размера окна область, где должен находиться элемент управления, не обновляется. Обыскивая форумы, я понял, что скрывать элемент управления на showEvent() нельзя, это правда? если так, то как / где я должен пытаться скрыть контроль. Если возможно скрыть элемент управления от showEvent(), как я могу предотвратить замораживание элемента управления.

Спасибо за ваше время.

Ответы [ 2 ]

5 голосов
/ 30 сентября 2011

Если проблема связана с вызовом hide () во время вашего шоу-события (я не могу подтвердить, что он явно запрещен, но в целом это не звучит как хорошая идея) и вызовом hide из вашего шоу-события выдействительно нужно иметь этот код, тогда вы можете использовать таймер одиночного выстрела:

QTimer::singleShot( 0, this, SLOT(hide()) );

, который будет просто откладывать выполнение функции hide() до следующего раунда цикла событий.

1 голос
/ 30 сентября 2011

Может быть, вы могли бы использовать QStackedLayout или QStackedWidget , у которого в стеке два виджета: ваш элемент управления и "пустой" QWidget.Если вы сделали это, вместо того, чтобы использовать show () и hide () на вашем элементе управления, вы переключаете то, что находится на вершине стека.

Таким образом, вы никогда не попытаетесь отобразить скрытый виджет - если ваш элемент управления не 'Если вы не видите, вы визуализируете пустой QWidget - и я подозреваю, что это решит ваши графические глюки.

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

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