Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Вячеслав от Октября 13, 2007, 22:11



Название: Помогите грабли обойти ...
Отправлено: Вячеслав от Октября 13, 2007, 22:11
Дано :
1) Qt 4.3.1
2) QDockWidget + QToolBox + несколько виджетов вложенных в тулбокс - все шикарно работает
3) Делаем свой виджет ,вкладываем его в док , а тулбоксину пихаем в свой виджет - после такого фокуса , размеры тулбокса становяться фиксированными и он(toolbox) вообще не реагирует на изменения виджета ....
Цитировать
mBox=new QToolBox(this);                           QVBoxLayout *layout = new QVBoxLayout(this);
 layout->setMargin(0);
 layout->addWidget(mBox);
 setLayout(layout);
Собственно вопрс - как заставить тулбоксину реагировать на изменения размера моего виджета ?


Название: Re: Помогите грабли обойти ...
Отправлено: Kainit от Октября 14, 2007, 13:19
Хотелось бы увидеть код полностью.

и на всякий случай поставь своему горемычному тулбоксу
setSizePolicy (обязательно!)
setResizePolicy

погляди как обращаются с тулбоксом в примере
examples\graphicsview\diagramscene\


Название: Re: Помогите грабли обойти ...
Отправлено: Вячеслав от Октября 15, 2007, 09:45
Политики пробывал крутить но ой :(
щаз стоит
Цитировать
setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum));
А код полностью - дома причешу и кину ...


Название: Re: Помогите грабли обойти ...
Отправлено: QCasper от Октября 15, 2007, 15:45
Может быть я что-то не так понимаю, но вот такой код работает надлежащим образом:

Код:
test::test(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
QDockWidget *dw = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea, dw);

MyWidget *mw = new MyWidget(this);
dw->setWidget(mw);

QToolBox *tb = new QToolBox(mw);

QVBoxLayout *lt = new QVBoxLayout(mw);
lt->addWidget(tb);

tb->addItem(new QPushButton("First", tb), "Button");
tb->addItem(new QPushButton("Second", tb), "Another Button");
}


Название: Re: Помогите грабли обойти ...
Отправлено: Вячеслав от Октября 15, 2007, 23:08
а хз .... Это отличаеться от моего варианта только заданием парента лайоута вместо setLayout .Но все-равно спасибо - завтра попробую ...


Название: Re: Помогите грабли обойти ...
Отправлено: yshurik от Октября 16, 2007, 01:16
а хз .... Это отличаеться от моего варианта только заданием парента лайоута вместо setLayout .Но все-равно спасибо - завтра попробую ...

если хотите с setLayout то убирайте this:

mBox=new QToolBox;                           
QVBoxLayout * layout = new QVBoxLayout;
layout->addWidget(mBox);
setLayout(layout);

иначе делает reparent и скорее всего с этим связанна проблема


Название: Re: Помогите грабли обойти ...
Отправлено: Вячеслав от Октября 16, 2007, 09:27
Ясненько  - вечером покапаюсь;)


Название: Re: Помогите грабли обойти ...
Отправлено: korka от Ноября 10, 2008, 12:31
Здравствуйте.

Я пишу на PyQt, практически как на C++, синтакс немного отличается.

В продолжении этой темы:

Я создал QDockWidget как в примере, добавил функцию event на press mouse:

    def mousePressEvent(self,  QMouseEvent):
        print "mousePressEvent"

При запуски проги я нажимаю на rect DockWidget-а, этот event ни чего не распечатывает, если нажимю в не его, то срабатывает. Почему так? Я передаю и DockWidget-у и Widget-у(который даю DockWidget) parrent MainMenu, делаю их setEnabled(True)
Спасибо


Название: Re: Помогите грабли обойти ...
Отправлено: Вячеслав от Ноября 11, 2008, 09:16
а куды вывод print'a должен валиться ? Если приложение из консоли пущать - не спасет ?


Название: Re: Помогите грабли обойти ...
Отправлено: korka от Ноября 11, 2008, 16:44
print в console! Это не принципиально, можно print заменить на показ MsgBox  с каким нибудь техтом  :-\