LINUX.ORG.RU

qt: изменение размеров виджетов

 


1

2

Всех приветствую.
В целях расширения кругозора озадачился следующим вопросом. Как правильно подгонять размеры виджетов без виджетов размещения (которые layout).
Например: нарисовал я в дезигнере некую форму. Все там красиво, резиново, тянется. Посередке опутанный layout-ами лежит QFrame frame. Дальше я в коде пишу нечто такое:

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
  ui->setupUi(this);
  my = new MyWidget(ui->frame);
}
А дальше я желаю чтобы мой виджет сам каким либо образом занял все пространство frame. И при этом если я буду менять размер формы (а значит и этого frame) мой виджет тоже как-то сам собой менял свой размер и себя перерисовывал в соответствии с новыми размерами.
Внутри моего виджета расположена матрица из QLabel положение и размер которых я и изменяю в процессе изменения размеров frame.
И вот как то мне непонятно, где размещать функции которые будут ресайзить и перерисовывать мой виджет. Как я понял самое правильное размещение это внутри paintEvent(QPaintEvent *ev). Но у меня почему то при отрисовке в этой функции зацикливается перерисовка (такое ощущение что функция сама себя вызывает через перерисовку frame). Хотелось бы как-то правильно от этого избавится.

★★★★

какая замечательная каша.

Как правильно подгонять размеры виджетов без виджетов размещения (которые layout).

трижды подумай зачем тебе это надо, и используй layout.

А дальше я желаю чтобы мой виджет сам каким либо образом занял все пространство frame

ну задай ему layout. и добавляй свой виджет в этот layout.
а еще лучше - воспользуйся widget propagation (кажется так оно зовется в qtcreator) прямо в дизайнере

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

трижды подумай зачем тебе это надо, и используй layout.

Плюсую этого оратора.

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

А в чем проблема сделать так как хочу я? Я готов дописать немного кода в разные места. Вопрос только в том какого и куда.

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

Проблема в том, что дефолтный фрейм не сообщает от resize event'е значит без костылей как хочешь ты не получится, а лейауты - это прямое решение, которое для этого и создано

Так что вся твоя затея - [вещества][хочется странного]

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

дефолтный фрейм не сообщает от resize event'е

Вот! Отличный ответ. Тогда следующие вопросы:
- Где почитать что могут и немогут вот такого специфичного различные классы в Qt?
- Так себя ведут все потомки QWidget без исключений?
- Открываю qt-дезигнер (или креатор, без разницы). Выбираю там шаблон «mainwindow» (тот который с меню строкой статуса и панелью инструментов). Хочу в середку зафигарить QTabWidget причем так, чтобы он там был один и при этом сам растягивался на все свободное место. В что его запихать чтобы получить искомое?

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

В что его запихать чтобы получить искомое?

В layout. А вообще можешь конечно сделать велик и внутри resizeEvent родительского виджета вручную подгонять размер например первого дочернего, если он вообще существует. Только для этого тебе придется рожать свой класс на основе класса родительского виджета и добавлять весь этот бред туда только ради велосипедизма. Тебе оно нужно?

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

В layout.

Как это сделать руками без кода в дезигнере? Мне доступны только вертикальный, горизонтальны, грид- и форм- layout. Какой использовать? Что прописать в параметры, чтобы после ctrl+r он заполнил все пространство и менял размер вслед за изменением размера приложения?

можешь конечно сделать велик

Канешно могу. Но не буду. В данном случае я сам могу оценить ценность тех или иных решений. Достаточно было узнать некоторые детали о которых тут любезно сообщили.

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

Кстати. Чем дальше тем интересней.
Рисую в дезигнере «Main Window». Делаю QTabWidget центральным виджетом:

setCentralWidget(ui->tabWidget); 
таким образом вопрос растягивания виджет в mainwindow решен (почему это нельзя сделать в дезигнере очень хороший вопрос).
Но теперь проблема дальше. Страницы QTabWidget суть QWidget.
Что и как положить внутрь его чтобы эта внутренность растягивалась в след за всем QTabWidget? Я все это пытаюсь делать в самом дезигнере.

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

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

И всё.

Обажаю диванных теоретиков! Если вас не затруднит пришлите ui-файл в котором есть qtabwidget в котором размещен любой другой виджет размер которого изменяется автоматом вслед за qtabwidget - можете использовать любой layout.

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

// похоже пришло время пересобрать мир, мир сам не пересобирется :(

почему это нельзя сделать в дезигнере очень хороший вопрос

это баг, да

Что и как положить внутрь его чтобы эта внутренность растягивалась в след за всем QTabWidget? Я все это пытаюсь делать в самом дезигнере.

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

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

это баг, да

насчет бага, неуверен (скорей фича). У меня по крайней мере не крашиться. Просто я не нашел способа это сделать там.

Насчет tabwidget. Правильно ли я понял. Если я в QWidget и его наследников воткну Layout (воткну в коде), а в него другой виджет, то при изменении родительского виджета, дочерний при помощи layout-а так же будет изменяться?

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

таким образом вопрос растягивания виджет в mainwindow решен (почему это нельзя сделать в дезигнере очень хороший вопрос).

Stil

это баг, да

Вы что? Наркоманты?
Как для виндузятников-делфистов:

  1. File -> New File or Project... -> Applications -> Qt Widget Applications -> Next -> Next -> Next -> Finish.
  2. Открываешь в Qt Designer/Qt Creator файл MainWindow.ui, кидаешь на форму QTabWidget.
  3. Кликаешь левой кнопкой на MainWindow в правом верхнем окне (там где дерево свойств) и нажимаешь Ctrl+L (ну или кликаешь правой кнопкой на MainWindow -> Lay Out -> Lay Out Vertically.
  4. ???????????????????????
  5. Profit!!!

QTabWidget растягивается с формой без всяких правок в коде.

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

Да пожалуйста!

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <widget class="QWidget" name="tab">
       <attribute name="title">
        <string>Tab 1</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_2">
        <item>
         <widget class="QTreeWidget" name="treeWidget">
          <column>
           <property name="text">
            <string>Да ты же</string>
           </property>
          </column>
          <item>
           <property name="text">
            <string>Наркомант</string>
           </property>
          </item>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QWidget" name="tab_2">
       <attribute name="title">
        <string>Tab 2</string>
       </attribute>
      </widget>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>400</width>
     <height>17</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

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

В том, что у тебя нет скилов?


Note: Generally, you should refrain from calling update() or repaint() inside a paintEvent(). For example, calling update() or repaint() on children inside a paintevent() results in undefined behavior; the child may or may not get a paint event.



Угадай какой метод вызывает resize?

Да и есть event такой... resizeEvent кажись.

Иди лучше что-то почитай. И ещё - setGeometry для у поротых делфистов.

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

QTabWidget растягивается с формой без всяких правок в коде.

Ну что сказать, шайтан!

С другой стороны баг все таки в дезигнере (4.8) и креаторе (3.1.1) присутствует. Если открыть выше приведенный ui в дезигнере и попробовать убрать: <layout class=«QVBoxLayout» name=«verticalLayout_2»> дезигнер вместо него уберет: <layout class=«QVBoxLayout» name=«verticalLayout»> да и в обратную сторону тоже верно. если кинуть на форму tabwidget, а в его первую вкладку например TableWidget и попробовать «растянуть» таблицу layout-ом, то сначала растянется tab. Но тут хоть какая-то логика есть. Зачем растягивать потомка если родитель не «тянется».

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

В том, что у тебя нет скилов?

ох епт, мы что в толксах? я и не претендую на лавры матерого GUI-кутешника.

у поротых делфистов

Что вы меня это дельфой попрекаете. Последний раз я ее открыл и тут же закрыл 15 лет назад.

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

Наркоманты?

так говоришь, как будто это что-то плохое

Profit!!!

под багом я имел в виду невозможность (в дизайнере) установки произвольного наследника QWidget в качестве centralWidget для QMainWindow. Про «набрасывание» мышкой и лейауты у меня вопросов не было :)

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

И еще. Чтобы содержимое tab-а могло растягиваться нужно layout ставить определенным образом. Накидать в него компонентов и потом встав на сам tab нажать ctrl+l. Если просто выбрать накиданные компоненты мышкой+ctrl. И потом их объеденить lauout-ом, то нифига не получится. Он будет с позиционирован абсолютно.

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

Он будет с позиционирован абсолютно.

А все почему? А потому!
Вариант когда layout пихаем на tab:

// ui_mainwindow_2.h
...
tabWidget = new QTabWidget(centralWidget);
tab_test = new QWidget();
verticalLayout_3 = new QVBoxLayout(tab_test);
verticalLayout_3->addLayout(horizontalLayout);
verticalLayout_3->addWidget(text_log);
verticalLayout_3->addWidget(progressBar);
tabWidget->addTab(tab_test, QString());
...

Вариант когда выделяем 3 виджета на tab-е и объединяем их таким-же layout-ом:

// ui_mainwindow.h
...
tabWidget = new QTabWidget(centralWidget);
tab_test = new QWidget();
widget = new QWidget(tab_test);
widget->setGeometry(QRect(9, 9, 401, 481));
verticalLayout_3 = new QVBoxLayout(widget);
verticalLayout_3->addLayout(horizontalLayout);
verticalLayout_3->addWidget(text_log);
verticalLayout_3->addWidget(progressBar);
tabWidget->addTab(tab_test, QString());
...
Как говорится найдите 2 отличия. Самое печальное, что в инспекторе объектов этот widget никак не представлен!
Норкоманты!

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

С другой стороны баг все таки в дезигнере (4.8) и креаторе (3.1.1) присутствует. Если открыть выше приведенный ui в дезигнере и попробовать убрать: <layout class=«QVBoxLayout» name=«verticalLayout_2»> дезигнер вместо него уберет: <layout class=«QVBoxLayout» name=«verticalLayout»> да и в обратную сторону тоже верно. если кинуть на форму tabwidget, а в его первую вкладку например TableWidget и попробовать «растянуть» таблицу layout-ом, то сначала растянется tab. Но тут хоть какая-то логика есть. Зачем растягивать потомка если родитель не «тянется».

Не вижу вообще никаких багов. Всё нормально убирается у меня из меню компоновки формы. Вы занимаетесь каким-то странным делом. Вместо компоновки формы по Ctrl+L вы кидаете на неё Layout'ы с абсолютным позиционированием из бокового окна слева, которые ведут себя там как виджеты.

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

В целом я разобрался. Вам спасибо за понимание различия размещения layout-ов. Если хотите продолжить дискуссию - велкам.

Не вижу вообще никаких багов.

Внимательно прочтите то, что я написал.
Ну а чтобы то, что я написал выглядело более выпукло. Попробуйте во второй вкладке tab-а добавить layout с парой виджетов. А потом попробуйте удалить layout на первой вкладке. Так что бы layout на второй вкладке остался.
То что у них там немного кривовато это факт. Другое дело что, баг в целом не критичный если о нем знать. А вот если как я методом тыка понять что и как можно долго недоумевать.
Опять же нелогичное поведение кнопок компоновки из главного меню, которое очень странно коррелирует с выбранными объектами на проектируемой форме. В частности для containers.

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

В дизайнере у всех виджетов есть есть что-то типа resizePolicy или что-то такое. На память не помню, а среды под рукой нет.

upd.

Там есть параметры sizePolicy - раздельно в высоты и вширь. (там еще stretch factor, но тут я вам ничего сказать не могу).

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

Давайте ещё выпуклее.

Какой Layout вы имеете ввиду?
Layout, который используется в компоновке виджета (выбранный виджет -> Lay Out)?
Или Layout, с абсолютным позиционированием, который вы перетягиваете на форму?
Я попробовал по-разному, но при удалении Layout'а с первой вкладки на второй всегда оставался независимый слой.

То что у них там немного кривовато это факт.

Если это действительно баг, или неправильное поведение - это нужно зарепортить. QTabWidget - один из самых сложных виджетов и манипулировать им в Qt Creator'е/Qt Designer'e достаточно сложно.

Опять же нелогичное поведение кнопок компоновки из главного меню, которое очень странно коррелирует с выбранными объектами на проектируемой форме. В частности для containers.

А по-моему всё логично. Просто немного сложновато. Особенно для виджетов-контейнеров, типа TabWidget. Виджет, на который можно кидать другие виджеты, имеет иконку компоновки. Если виджет скомпонован, иконка будет изменённой. По-хорошему, каждому виджету, который может размещать в себе другие - нужна компоновка. Для построения сложных интерфейсов необходимы слои-виджеты (справа), которые потом можно также откомпоновать. Меню компоновки доступно на каждом виджете-контейнере. При этом, стоит заметить, что TabWidget состоит из нескольких (по количеству вкладок) виджетов-контейнеров. И каждому из этих виджетов необходима компоновка. Переключение между вкладками для редактирования интуитивно несколько непонятно, но просто: выбираем вкладку, кликаем на tabWidget, компонуем, снова выбираем вкладку и снова кликаем на tabWidget и компонуем. Таким образом можно откомпоновать все вкладки.

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

Он просто не компоновал виджет, а накидал слоёв и контейнеров на форму, resizePolicy/stretch factor/sizePolicy тут вообще ни при чём.

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

sizePolicy

Судя по моему вопросу и вашему ответу. В поднятой теме вы плаваете еще больше чем я. Без обид.

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

В своем выпуклом посте забыл указать исходную форму. Дико извиняюсь. В том случае я имел ввиду форму описанную вашим ui-файлом. Вот в этой вашей форме во второй вкладке сделайте точно такую же компоновку, что и в первой вкладке. А потом уже попробуйте убрать layout из первой вкладки.

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

Всё удаляется прекрасно.
На второй вкладке слой остаётся.

Ещё разок прочитайте:

Меню компоновки доступно на каждом виджете-контейнере. При этом, стоит заметить, что TabWidget состоит из нескольких (по количеству вкладок) виджетов-контейнеров. И каждому из этих виджетов необходима компоновка. Переключение между вкладками для редактирования интуитивно несколько непонятно, но просто: выбираем вкладку, кликаем на tabWidget, компонуем, снова выбираем вкладку и снова кликаем на tabWidget и компонуем. Таким образом можно откомпоновать все вкладки или удалить слои на отдельных вкладках.

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

Разобрался. Спасибо.
Но мне все равно непонятно, почему нельзя в инспекторе объектов, выбрать нужную вкладку, и по правой кнопке удалить компоновку (ну или добавить).
Почему нельзя выбрать вкладку визуально (на конструируемой форме) и использовать кнопки компоновки из основного меню (которое вверху).
И еще, я не накидывал Layout-ы на форму из левого меню виджетов. Всегда использовал только кнопки компоновки сверху.

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

Но мне все равно непонятно, почему нельзя в инспекторе объектов, выбрать нужную вкладку, и по правой кнопке удалить компоновку (ну или добавить).

Издержки сложного виджета просто.

Почему нельзя выбрать вкладку визуально (на конструируемой форме) и использовать кнопки компоновки из основного меню (которое вверху).

Почему это? Всё прекрасно компонуется по кнопкам из меню вверху. Если просто выбрать виджет-контейнер (вкладку, например) и нажать кнопку компоновки.
Вот смотри:

  1. Кидаешь на форму TabWidget;
  2. Кидаешь на вкладку TabWidget'а несколько виджетов:
    1. RadioButton;
    2. CommandLinkButton;
    3. TableWidget.
  3. С помощью Ctrl выделяешь CommandLinkButton и RadioButton и нажимаешь кнопку Lay Out Horizontally (Ctrl + H), получив слой horizontalLayout;
  4. С помощью Ctrl выделяешь horizontalLayout и TableWidget и нажимаешь в меню сверху Lay Out Vertically (Ctrl + L), получешь слой verticalLayout, который позиционирован абсолютно;
  5. Выбираешь активную вкладку (кликая на TabWidget), нажимаешь в меню сверху Lay Out Vertically (Ctrl + L), теперь виджет-контейнер TabWidget (первая вкладка) скомпонован относительно;
  6. Кликаешь на форму (пустое место на виджете-контейнере MainWindow), нажимаешь в меню сверху Lay Out Vertically (Ctrl + L), теперь форма полностью скомпанована;
  7. При желании переключаешься на вторую вкладку (Tab 2) и повторяешь пункты 2-5.

Такая вот форма, MainWindow.ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>296</width>
    <height>312</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QVBoxLayout" name="verticalLayout_3">
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
       <number>1</number>
      </property>
      <widget class="QWidget" name="tab">
       <attribute name="title">
        <string>Tab 1</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_2">
        <item>
         <layout class="QVBoxLayout" name="verticalLayout">
          <item>
           <widget class="QTableWidget" name="tableWidget">
            <row>
             <property name="text">
              <string>New Row</string>
             </property>
            </row>
            <row>
             <property name="text">
              <string>New Row</string>
             </property>
            </row>
            <row>
             <property name="text">
              <string>New Row</string>
             </property>
            </row>
            <row>
             <property name="text">
              <string>New Row</string>
             </property>
            </row>
            <column>
             <property name="text">
              <string>New Column</string>
             </property>
            </column>
            <column>
             <property name="text">
              <string>New Column</string>
             </property>
            </column>
            <column>
             <property name="text">
              <string>New Column</string>
             </property>
            </column>
            <column>
             <property name="text">
              <string>New Column</string>
             </property>
            </column>
           </widget>
          </item>
          <item>
           <layout class="QHBoxLayout" name="horizontalLayout">
            <item>
             <widget class="QCommandLinkButton" name="commandLinkButton">
              <property name="text">
               <string>CommandLinkButton</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QRadioButton" name="radioButton">
              <property name="text">
               <string>RadioButton</string>
              </property>
             </widget>
            </item>
           </layout>
          </item>
         </layout>
        </item>
       </layout>
      </widget>
      <widget class="QWidget" name="tab_2">
       <attribute name="title">
        <string>Tab 2</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_5">
        <item>
         <layout class="QVBoxLayout" name="verticalLayout_4">
          <item>
           <widget class="QTableWidget" name="tableWidget_2">
            <row>
             <property name="text">
              <string>New Row</string>
             </property>
            </row>
            <row>
             <property name="text">
              <string>New Row</string>
             </property>
            </row>
            <row>
             <property name="text">
              <string>New Row</string>
             </property>
            </row>
            <row>
             <property name="text">
              <string>New Row</string>
             </property>
            </row>
            <column>
             <property name="text">
              <string>New Column</string>
             </property>
            </column>
            <column>
             <property name="text">
              <string>New Column</string>
             </property>
            </column>
            <column>
             <property name="text">
              <string>New Column</string>
             </property>
            </column>
            <column>
             <property name="text">
              <string>New Column</string>
             </property>
            </column>
           </widget>
          </item>
          <item>
           <layout class="QHBoxLayout" name="horizontalLayout_2">
            <item>
             <widget class="QCommandLinkButton" name="commandLinkButton_2">
              <property name="text">
               <string>CommandLinkButton</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QRadioButton" name="radioButton_2">
              <property name="text">
               <string>RadioButton</string>
              </property>
             </widget>
            </item>
           </layout>
          </item>
         </layout>
        </item>
       </layout>
      </widget>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

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

Почему это? Всё прекрасно компонуется по кнопкам из меню вверху. Если просто выбрать виджет-контейнер (вкладку, например) и нажать кнопку компоновки.

В таком виде работает это я уже понял.

А если выбрать активную вкладку не на визуальной форме, а ткнув в инспектор объектов (иногда там выбирать удобней особенно если нужен сам layout, а не его содержимое), ткнув именно в tab, а не в сам tabWidget.

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

Это издержки и сложности инспектирования виджетов-контейнеров подобного типа. Да, нелогично, но разобраться можно.

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