Russian Qt Forum
Ноябрь 24, 2024, 02:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: автоматическое изменение размера главного виджета при измене  (Прочитано 8803 раз)
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« : Март 02, 2005, 13:34 »

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Sergeich
Гость
« Ответ #1 : Март 02, 2005, 15:32 »

А QWidget::adjustSize() не помогает?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Март 02, 2005, 16:55 »

хм... попробую, что-то я про эту функцию забыл Улыбающийся
а ведь когда-то использовал...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Март 05, 2005, 10:31 »

все эти функции корректно работают только до первого show(), после этого приходится ручками... ИМХО бага?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #4 : Март 05, 2005, 10:59 »

а я использовал

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

может так поможет
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Март 05, 2005, 12:23 »

в том-то и дело, что если виджет виден - ему adjustSize не помогает
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Sergeich
Гость
« Ответ #6 : Март 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"
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 23.