2016-10-21 6 views
0

У меня есть QMainWindow, и из этого я открываю другое диалоговое окно, используя dialog-> show(); Внутри диалога У меня есть кнопка «Button1» и «Button2».Qt изменяет модальность диалогового окна во время выполнения, не скрывая его в первый раз, а затем показывает

Здесь, когда пользователь нажимает «Button1», чем модальность диалогового окна, следует изменить на «Qt :: ApplicationModal», а когда пользователь нажимает «Button2», то модальность диалога должна измениться на «Qt :: NonModal».

Я могу сделать это, используя «setWindowModality (Qt :: ApplicationModal);» внутри кнопки «Button1», затем следуют «hide() и show();» и "setWindowModality (Qt :: NonModal);" внутри «Button2» щелкнули, а затем «hide() и show();»

Но если я использую метод выше, чем QDialog, это дает мерцание, которое очевидно, поскольку я использую функцию «hide() и show()». Этот мигающий эффект я не хочу.

Так, любезно предлагает:

  1. Как изменить модальность QDialog открыло шоу() без использования «шкурки()» и «шоу()» после изменения модальности?
  2. Если нет другого способа изменения модальности QDiloag во время выполнения, за которым следуют «скрыть» и «показать», чем можно уменьшить влияние QDialog, оно исчезает, а затем снова отображается.

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

Спасибо,

+1

Я получил бы дизайнер UX на борту. Я никогда не видел, чтобы диалог менял свою модальность, пока он открыт, поэтому IMHO - это признак того, что общее взаимодействие с GUI должно быть проверено дважды. – peppe

ответ

2

Я использовал QDialog, но никогда не нужно изменить модальность во время выполнения. Qt-документы совершенно ясны и необходимы для Qt :: WindowModality

Это свойство имеет смысл только для окон. Модальный виджет предотвращает получение виджетов в других окнах. Значение этого свойства контролирует, какие окна блокируются при видимости виджета . Изменение этого свойства во время видимости окна не имеет эффекта ; сначала нужно скрыть() виджет, а затем снова показать().

Таким образом, последовательность команд hide() и show() требуется для изменения модальности во время выполнения. Трюк может заключаться в создании другого параллельного QDialog с теми же свойствами исходного, за исключением модальности, и сделать его перекрывающим существующим. Это не так «линейно», но это решение иногда используется для «двойных» объектов. В этом случае вы должны помнить, какой из QDialog вы используете.