crossplatform.ru

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


  Ответ в Взаимное расположение виджетов
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 8.9.2014, 23:50
 
Цитата(sz36 @ 8.9.2014, 21:06) *
Вот мой xml
мне вот в него даже смотреть лень, я думаю и другим тоже. Выложи ui-файл зазипованный (не rar), чтобы его быстро открыть можно было.
sz36 Дата 8.9.2014, 18:06
 
Цитата(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 Дата 7.9.2014, 20:59
 
Цитата(sz36 @ 7.9.2014, 23:43) *
Во-первых, непонятно у кого. У QHBoxLayout нет такого.
Компоновщик - не виджет, он не может жить самостоятельно, он может быть назначен виджету для управления положением дочерних виджетов.
Подробнее о компоновке читай в доке


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

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

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


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

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



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


Цитата(sz36 @ 7.9.2014, 17:58) *
Какого черта виджеты в дизайн-тайме в QtCreator'е ведут себя совсем не так, как в рантайме?
к сожалению такое бывает, это глюк QtCreator-а
sz36 Дата 7.9.2014, 14:58
  Hi, All!

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

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

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

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

Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 6.5.2024, 7:15