LINUX.ORG.RU

QtCreator, редактор форм, добавить возможность менять свойство visible

 , ,


0

2

Добрый день, подскажите пожалуйста, где в исходном коде qtcreator чего поменять, чтобы добавить в редакторе форм возможность устанавливать свойство visible?

★★★★★

В двух словах - надо найти как рисуется рамка виджета, придумать новую рамку, добавить в property sheet (скорее всего в некий white list) свойство visible и написать обработчик изменения этого свойства, который будет менять стиль отрисовки рамки невидимого элемента. Возможно, ещё придётся как-то перехватить дефолтное поведение setVisible.

В более словах, имхо должно быть в job, или в багтреккере Qt.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Интересно, вот здесь (https://stackoverflow.com/questions/6460937/is-there-a-hide-property-for-push...) пишут что в старых версиях была возможность менять свойство visible, а исходя из какой логики данную возможность выпилили?

rumgot ★★★★★
() автор топика
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от rumgot

Кстати я сейчас вспоминаю, ведь можно было невидимые кнопки бросать на формы в 4.6 даже вроде. Можно посмотреть патч.

pon4ik ★★★★★
()
Ответ на: комментарий от rumgot

По ссылке есть и пример решения проблемы ручками:

1. Открываем XML-формы через Qt Creator в режиме Plain Text: кликаем на ui-файл правой клавишей мышки и выбираем там Open With > Plain Text Editor.

2. Вставляем:

<property name="visible">
   <bool>false</bool>
</property>

В нужный нам <widget></widget>.

EXL ★★★★★
()
Ответ на: комментарий от rumgot

Q_PROPERTY(bool visible READ isVisible WRITE setVisible DESIGNABLE false)

The DESIGNABLE attribute indicates whether the property should be visible in the property editor of GUI design tool (e.g., Qt Designer). Most properties are DESIGNABLE (default true). Instead of true or false, you can specify a boolean member function.

Это свойство явно помечено, как не отображаемое в дизайнере. Можешь попробовать по хардкору отредактировать хидер. Хз, прокатит ли это.

ox55ff ★★★★★
()
Ответ на: комментарий от rumgot

Возможно, даже 4.8. Может у меня конечно мнительность играет, но кмк, я делал так. Это крайние версии Qt с которыми я имел дело в каком то более менее промышленном масштабе.

Почему-то я решил, что тебя интересует именно форму прятать.

pon4ik ★★★★★
()
Ответ на: комментарий от ox55ff

Т.е. если автору сильно нужен такой патч, то он может найти как используется аттрибут DESIGNABLE, и сделать доп проверку на имя свойства.

Считай - готовый рецепт настойки из костыля.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

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

rumgot ★★★★★
() автор топика
Ответ на: комментарий от pon4ik

Буду пробовать. Есть идея унаследоваться от какого нибудь QWidget и переопределить у него Q_PROPERTY visible. Так прокатит?

rumgot ★★★★★
() автор топика
Ответ на: комментарий от rumgot

Криво работает. Если в .ui прописать скрытие, то оно не будет отображаться на форме и добавление элементов с прочей мишурой приведут к поехавшему интерфейсу при отображении элементов

SR_team ★★★★★
()
Ответ на: комментарий от SR_team

Но ведь скрытие элемента через свойство visible = удалению элемента. В чем там могут быть проблемы? Или в рантайме тоже есть проблемы?

rumgot ★★★★★
() автор топика
Ответ на: комментарий от rumgot

Вот я про рантайм и говорю. Скрыл элемент в формошлепе, накидал еще элементов и оно все поехало в рантайме, когда скрытые элементы отобразились

SR_team ★★★★★
()
Ответ на: комментарий от rumgot

Ответ на этот вопрос точно надо искать на трекере Qt или в чейнджлогах.

pon4ik ★★★★★
()

Можно добавить динамическое свойство и затем обрабатывать его в коде

anonymous
()
Ответ на: комментарий от SR_team

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

rumgot ★★★★★
() автор топика
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от rumgot

Но это при условии, что после скрытия элемента в .ui ты добавлял другие элементы в свой компоновщик через графический редактор

SR_team ★★★★★
()
Ответ на: комментарий от SR_team

Короче говоря, я плюнул на этот механизм visible и решил для динамического отображения/скрытия группы элементов/виджетов внизу окна использовать QSplitter - очень удобно и видимо для моей задачи именно он и предназначен.

rumgot ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.