crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Взаимное расположение виджетов, Не понимаю как действуют проперти
sz36
  опции профиля:
сообщение 7.9.2014, 14:58
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 7.9.2014
Пользователь №: 4223

Спасибо сказали: 0 раз(а)




Репутация:   0  


Hi, All!

Я только взял в руки Qt, вопросы, может, идиотские, не обессудьте. Привык к C++Builder. Пишу под Андроид.

1) Есть у меня QHBoxLayout во всю ширину экрана и в нем 2 компонента: QLabel слева и кнопка справа. Текст QLabel меняется в
процессе работы - туда выводится некое состояние. Когда текст короткий, все хорошо. Но когда он длиннее, QLabel расширяется и
выпирает кнопку вправо, аж за край экрана. Причем, если после этого текст сокращается, то QLabel не возвращается в прежнее
состояние.

Как от этого избавиться? Сделать так, чтобы если текст не умещается в QLabel, он бы просто обрезался (справа)? Мои попытки менять
разные проперти не привели к успеху. И вообще, алгоритм sizePolice для меня тайна, покрытая мраком, не понимаю.

2) Какого черта виджеты в дизайн-тайме в QtCreator'е ведут себя совсем не так, как в рантайме? В частности, в случае 1, в креаторе
слишком длинный текст QLabel таки обрезается, но обрезается почему-то слева.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.9.2014, 20:22
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(sz36 @ 7.9.2014, 17:58) *
Есть у меня QHBoxLayout во всю ширину экрана
Его нельзя сделать во всю ширину экрана, нет у него такой возможности. Можно только у родительского виджета, в который помещён этот компоновщик.
Чтобы не уходило за пределы экрана, задай виджету максимальный размер.


Цитата(sz36 @ 7.9.2014, 17:58) *
Какого черта виджеты в дизайн-тайме в QtCreator'е ведут себя совсем не так, как в рантайме?
к сожалению такое бывает, это глюк QtCreator-а
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sz36
  опции профиля:
сообщение 7.9.2014, 20:43
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 7.9.2014
Пользователь №: 4223

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 7.9.2014, 21:22) *
Его нельзя сделать во всю ширину экрана, нет у него такой возможности. Можно только у родительского виджета, в который помещён этот компоновщик.

Ну да, так и есть. Кнопка вылезает и за край родителя (QMainWindow)


Цитата(Litkevich Yuriy @ 7.9.2014, 21:22) *
Чтобы не уходило за пределы экрана, задай виджету максимальный размер.

Во-первых, непонятно у кого. У QHBoxLayout нет такого. А если у QLabel, то это вычислять надо - ширина экрана, минус отступы, минус ширина кнопки... А во-вторых, главное, все эти размеры в дизайн тайме неизвестны, поскольку неизвестна ширина экрана. Можно, конечно, попытаться в рантайме все это отрегулировать, но, опять же, непонятно когда. В конструкторе реальная ширина еще неизвестна, то есть надо евенты какие-то перегружать, в общем, геморрой. Более простого способа нет? Нафига нужны тогда эти sizePolicy, отступы и прочие проперти?



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.9.2014, 20:59
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(sz36 @ 7.9.2014, 23:43) *
Во-первых, непонятно у кого. У QHBoxLayout нет такого.
Компоновщик - не виджет, он не может жить самостоятельно, он может быть назначен виджету для управления положением дочерних виджетов.
Подробнее о компоновке читай в доке


Я подозреваю, что ты положил компоновщик на виджет в дизайнере просто перетянув его из списка виджетов.
Корневой компоновщик в дизанере создаётся неочевидным способом - просто выделяются дочерние виджеты, а затем
либо через конткстное меню
либо на панели компоновок
выбирается нужный тип компоновки.
(подробнее в доке)

Компоновщики же, из списка виджетов, давно нужно было убрать как вводящие в заблуждение. Но авторы Qt не захотели этого делать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sz36
  опции профиля:
сообщение 8.9.2014, 18:06
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 7.9.2014
Пользователь №: 4223

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 7.9.2014, 21:59) *
Подробнее о компоновке читай в доке


Да читал я ту доку, нет там ответа. Вот мой xml (несущественные компоненты и проперти вырезаны)
Раскрывающийся текст

<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>398</width>
    <height>623</height>
   </rect>
  </property>
  <property name="sizePolicy">
   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
    <horstretch>0</horstretch>
    <verstretch>0</verstretch>
   </sizepolicy>
  </property>
  <widget class="QWidget" name="CentralWidget">
   <property name="sizePolicy">
    <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
   </property>
   <layout class="QVBoxLayout" name="VerticalLayout">
    <item>
     <layout class="QHBoxLayout" name="TopHLayout" stretch="0,0">
      <property name="spacing">
       <number>6</number>
      </property>
      <property name="leftMargin">
       <number>6</number>
      </property>
      <property name="topMargin">
       <number>3</number>
      </property>
      <property name="rightMargin">
       <number>3</number>
      </property>
      <property name="bottomMargin">
       <number>0</number>
      </property>
      <item>
       <widget class="QLabel" name="StateLabel">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
          <horstretch>0</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
        <property name="layoutDirection">
         <enum>Qt::LeftToRight</enum>
        </property>
        <property name="scaledContents">
         <bool>false</bool>
        </property>
        <property name="alignment">
         <set>Qt::AlignCenter</set>
        </property>
        <property name="margin">
         <number>4</number>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QPushButton" name="BtSetup">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
          <horstretch>1</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
        <property name="minimumSize">
         <size>
          <width>64</width>
          <height>36</height>
         </size>
        </property>
        <property name="maximumSize">
         <size>
          <width>36</width>
          <height>16777215</height>
         </size>
        </property>
        <property name="layoutDirection">
         <enum>Qt::LeftToRight</enum>
        </property>
        <property name="styleSheet">
         <string notr="true">image : url(:/Files/Gear.png)</string>
        </property>
        <property name="icon">
         <iconset>
          <normalon>:/Files/Gear.png</normalon>
         </iconset>
        </property>
        <property name="iconSize">
         <size>
          <width>48</width>
          <height>48</height>
         </size>
        </property>
       </widget>
      </item>
     </layout>
    </item>
    <item>
     <widget class="QTabWidget" name="TabWidget">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
</ui>



А во вложении скриншоты, илюстрирующие проблему



Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.9.2014, 23:50
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(sz36 @ 8.9.2014, 21:06) *
Вот мой xml
мне вот в него даже смотреть лень, я думаю и другим тоже. Выложи ui-файл зазипованный (не rar), чтобы его быстро открыть можно было.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.4.2024, 14:19