Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Пантер от Апрель 10, 2009, 11:39



Название: [4.x.x] Не могу сделать динамический виджет. :(
Отправлено: Пантер от Апрель 10, 2009, 11:39
Промучался пол дня, но решения не нашел, хоть вопрос и новичковский. :)
Есть диалог, в нем виджеты, расположенные так:
Код
C++ (Qt)
......................
QVBoxLayout* layout1=new QVBoxLayout();
layout1->addWidget(label1);
layout1->addWidget(label2);
layout1->addWidget(label3);
 
QHBoxLayout* layout2=new QHBoxLayout();
layout2->addWidget(buttonClose);
layout2->addWidget(buttonMore);
 
QVBoxLayout* mainLayout=new QVBoxLayout();
mainLayout->addLayout(layout1);
mainLayout->addLayout(layout2);
mainLayout->addWidget(listWidget);
 
this->setLayout(mainLayout);
......................
connect(buttonMore,
SIGNAL(clicked(bool)),
listWidget,
SLOT(setVisible(bool));
.............................
listWidget->hide();
При показе виджета форма растягивается, тут все нормально, но при скрытии форма остается в прежнем положении. В примере из книги указано, что для mainLayout нужно поставить фиксированный размер, это прокатывает, но мне нужно, чтобы можно было ресайзить диалог. Куда копать?


Название: Re: [4.x.x] Не могу сделать динамический виджет. :(
Отправлено: pastor от Апрель 10, 2009, 12:00
adjustSize() непробывал вызывать?


Название: Re: [4.x.x] Не могу сделать динамический виджет. :(
Отправлено: Пантер от Апрель 10, 2009, 12:15
Пробовал. Не помогает.


Название: Re: [4.x.x] Не могу сделать динамический виджет. :(
Отправлено: pastor от Апрель 10, 2009, 12:33
А выложи компилябельный примерчик, гляну у себя


Название: Re: [4.x.x] Не могу сделать динамический виджет. :(
Отправлено: Пантер от Апрель 10, 2009, 12:47
Решил!!!
this->resize(this->size().width(),this->layout().minimumSize().height())
Ы!


Название: Re: [4.x.x] Не могу сделать динамический виджет. :(
Отправлено: pastor от Апрель 10, 2009, 12:51
А если просто так:

resize(minimumSizeHint());

?


Название: Re: [4.x.x] Не могу сделать динамический виджет. :(
Отправлено: Пантер от Апрель 10, 2009, 16:56
Млин, не помогло данное решение. Пока так работает:
Код
C++ (Qt)
listWidget->setVisible(!listWidget->visible());
qApp->processEvents();//Без этого не работает
this->resize(this->size().width(),this->layout().minimumSize().height());
Если убрать qApp->processEvents(), ничего не работает. Как я понял, лайот сразу не вычисляет свои новые размеры. Кстати, можно даже так this->resize(this->size().width(),1). Вот только у этого решение косяк, так как происходит заметное моргание.