Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Racheengel от Март 02, 2005, 13:34



Название: автоматическое изменение размера главного виджета при измене
Отправлено: Racheengel от Март 02, 2005, 13:34
Ку всем.
Есть такой баг:
Виджет - "родитель" (контейнер), в который помещаются другие виджеты ("блоки") определенного (фиксированного) размера. У "родителя" есть QVBoxLayout, к которому цепляются все "новорожденные" блоки. Так вот, при отображении "контейнера", его размер оказывается каким-то совершенно непонятным (не отображает всех "детей"), но если хотя бы на 1 пиксел попытаться растянуть его мышью, "скачком" устанавливается нормальный размер.
Не лечится это ни updateGeometry, никак. Вручную, конечно, можно пересчитать размер контейнера в зависимости от размеров "детей", но ИМЗО это кривовато, можно ли как-нибудь заставить Qt сделать это автоматически?


Название: автоматическое изменение размера главного виджета при измене
Отправлено: Sergeich от Март 02, 2005, 15:32
А QWidget::adjustSize() не помогает?


Название: автоматическое изменение размера главного виджета при измене
Отправлено: Racheengel от Март 02, 2005, 16:55
хм... попробую, что-то я про эту функцию забыл :)
а ведь когда-то использовал...


Название: автоматическое изменение размера главного виджета при измене
Отправлено: Racheengel от Март 05, 2005, 10:31
все эти функции корректно работают только до первого show(), после этого приходится ручками... ИМХО бага?


Название: автоматическое изменение размера главного виджета при измене
Отправлено: Admin от Март 05, 2005, 10:59
а я использовал

dw->show();
dw->adjustSize();

может так поможет


Название: автоматическое изменение размера главного виджета при измене
Отправлено: Racheengel от Март 05, 2005, 12:23
в том-то и дело, что если виджет виден - ему adjustSize не помогает


Название: автоматическое изменение размера главного виджета при измене
Отправлено: Sergeich от Март 09, 2005, 17:22
Достаточно вызвать show() для "блока". Тогда все заработает.
Код:

//--------- main.cpp -----------
#include <qapplication.h>
#include <qlayout.h>
#include <qpushbutton.h>
#include <qlabel.h>

class DynWidget : public QWidget
{
Q_OBJECT
public:
DynWidget( QWidget* parent = 0, const char* name = 0 )
: QWidget( parent, name )
{
layout = new QVBoxLayout( this, 11, 6 );
layout->setAutoAdd( true );
QPushButton* addBut = new QPushButton( "New Label", this );
connect( addBut, SIGNAL( clicked() ), SLOT( addWidget() ) );
}
public slots:
void addWidget()
{
qDebug( "addWidget()" );
static int cnt = 1;
QLabel* label = new QLabel( QString( "Label N %1" ).arg(cnt), this );
label->show();
cnt++;
}
private:        
QVBoxLayout* layout;
};

int main( int argc, char** argv )
{
QApplication app( argc, argv );
DynWidget* dw = new DynWidget;
dw->addWidget();
dw->addWidget();
dw->show();
app.connect( &app, SIGNAL( lastWindowClosed() ), SLOT( quit() ) );
return app.exec();
}

#include "main.moc"