Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: evilguard от Март 22, 2007, 15:11



Название: Ширина QDockWidget/dockWidgetArea
Отправлено: evilguard от Март 22, 2007, 15:11
Как задать ширину, QDockWidget(он находится в Qt::LeftDockWidgetArea, то есть слева). По умолчанию слишком широко, это как-нибудь можно задать?


Название: Ширина QDockWidget/dockWidgetArea
Отправлено: Steven_Orko от Март 25, 2007, 13:11
Юзай наследника с переопределенной
Код:
QSize sizeHint(void);


Название: Ширина QDockWidget/dockWidgetArea
Отправлено: evilguard от Март 25, 2007, 13:53
Смотрю свойства QWidget - нету элементарной функции setWidth(). Зачем для простейших операций плодить новый класс. Мне ж не поведение нужно какое-то специфическое определить, а просто задать параметр.


Название: Ширина QDockWidget/dockWidgetArea
Отправлено: SABROG от Март 25, 2007, 15:36
А так ?

Код:

            QRect rc = button->geometry();
            rc.setWidth(10);
            button->setGeometry(rc);


или так

Код:

            button->setMaximumWidth(10);


Название: Ширина QDockWidget/dockWidgetArea
Отправлено: Steven_Orko от Март 25, 2007, 22:42
Цитата: "evilguard"
Смотрю свойства QWidget - нету элементарной функции setWidth(). Зачем для простейших операций плодить новый класс. Мне ж не поведение нужно какое-то специфическое определить, а просто задать параметр.

А затем, что тебе явно не просто окошно это надо, на котором ничего не будет. Вряд ли ты не будешь помещать туда свои виджеты.
Логика тролей проста (читай, ООП): класс должен быть автомномным в своем существовании, т.е. (если я плохо сказал) он должен восприниматься другими класса как "черная коробочка" со входами и выходами. Хотя твой стиль программирование - это именно твой стиль, навязывать другой я тебе не буду...


Название: Ширина QDockWidget/dockWidgetArea
Отправлено: Racheengel от Март 25, 2007, 23:52
класс и так автономен... но я ж могу ему сказать - эй, ты, коробочка, давай-ка ширину поменяй, а как ты это сделаешь, мне пох.


Название: Ширина QDockWidget/dockWidgetArea
Отправлено: evilguard от Март 27, 2007, 19:39
Steven_Orko
Мой стиль программирования возможно и неправильный,может я не понял понял что-то. То есть мне надо управлять шириной содержащегося на нем виджета(а точнее виджет лежит на лэйауте, а лэйаут соответственно на dockwidget). Так чью ширину мне изменять? Насчет входа и выхода(инкапсуляции то бишь) действительно - коробочка меняй ширину, а виджеты внутри нее сами в соответствии с ней подстроятся.
В дизайнере пробовал менять ширину. Не смотря на это компилируется все это хозяйство в окошко с фиксированной шириной. Похоже на баг, хотя точно не уверен.


Название: Ширина QDockWidget/dockWidgetArea
Отправлено: Steven_Orko от Март 28, 2007, 17:32
Цитата: "evilguard"

Мой стиль программирования возможно и неправильный,может я не понял понял что-то.

Не хотел наехать на стиль программирования... Извиняй )))
Цитата: "evilguard"

То есть мне надо управлять шириной содержащегося на нем виджета(а точнее виджет лежит на лэйауте, а лэйаут соответственно на dockwidget).  Так чью ширину мне изменять?


Насколько я понял выше, то надо было установить желаемую ширину/высоту для объекта класса  QDockWidget. Следовательно, ему и надо задавать. Создаешь класс-наследник, в котором определяешь 2 переменные-члена:
Код:

int m_iPreferedWidth; //Желаемая ширина
int m_PreferedHeight; //Желаемая высота


Создаешь, соответственно, 4 функции-члена:
Код:

void setPreferedWidth(const int iWidth) const; //Работает для вертикального положения
int preferedWidth(void) const;
void setPreferedHeight(const int iHieght) const; //Работает для горизонтального положения
int preferedHeight(void) const;


Переопределяешь функцию sizeHint():
Код:

QSize sizeHint(void) const;

Причем она должна возвращать разное значение QSize для разной ориентации QDockWidget. Написал бы и код, но я пишу по памяти, Assistant Qt4.x.x. нету рядом, т.к. работаю с Qt 3.х.х.
Таком метод мне подсказали сами Trolltech, когда я им писал вопрос насчет желаемой высоты QDockWidget. Так что... Использовать тебе его или нет решать тебе. ))))


Цитата: "evilguard"
Насчет входа и выхода(инкапсуляции то бишь) действительно - коробочка меняй ширину, а виджеты внутри нее сами в соответствии с ней подстроятся.


Все верно, так и получится ))))

Цитата: "evilguard"

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


Насчет этого не знаю, не пробовал и попробовать негде, разве кто еще это сделает )))


Название: Ширина QDockWidget/dockWidgetArea
Отправлено: evilguard от Март 28, 2007, 19:48
Steven_Orko
Спасибо, буду пробывать!


Название: Re: Ширина QDockWidget/dockWidgetArea
Отправлено: VozaMFC от Октябрь 02, 2009, 15:09
Дополнительную информацию как они все это делают можешь получит в кьюти демо/демонстрация/main window Qt 4.5.1