Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: alexman от Апрель 26, 2011, 15:03



Название: Мерцание отстегнутых QDockWidget при старте приложения.
Отправлено: alexman от Апрель 26, 2011, 15:03
Есть наследник от QMainWindow. В конструкторе создается туча отстегнутых QDockWidget-ов. Режимов редактирования у приложения много и поэтому сразу же их необходимо скрыть. Проблема заключается в том, что dock widget-ы все равно на мгновение появляются при старте. Как это можно исправить? Вот упрощенный код (на "сильных" ПК вряд ли увидете мерцание):

main.cpp
Код:
#include <QtCore/QDebug>
#include <QtGui/QApplication>
#include <QtGui/QDockWidget>
#include <QtGui/QMainWindow>

int main( int argc, char** argv )
{
QApplication app( argc, argv );

QMainWindow* window = new QMainWindow();

QDockWidget* dockWidget1 = new QDockWidget( window );
dockWidget1->setAllowedAreas( Qt::NoDockWidgetArea );
dockWidget1->resize( 250, 250 );
window->addDockWidget( Qt::LeftDockWidgetArea, dockWidget1 );
dockWidget1->setFloating( true );
dockWidget1->hide();

QDockWidget* dockWidget2 = new QDockWidget( window );
dockWidget2->setAllowedAreas( Qt::NoDockWidgetArea );
dockWidget2->resize( 250, 250 );
window->addDockWidget( Qt::LeftDockWidgetArea, dockWidget2 );
dockWidget2->setFloating( true );
dockWidget2->hide();

QDockWidget* dockWidget3 = new QDockWidget( window );
dockWidget3->setAllowedAreas( Qt::NoDockWidgetArea );
dockWidget3->resize( 250, 250 );
window->addDockWidget( Qt::LeftDockWidgetArea, dockWidget3 );
dockWidget3->setFloating( true );
dockWidget3->hide();

QDockWidget* dockWidget4 = new QDockWidget( window );
dockWidget4->setAllowedAreas( Qt::NoDockWidgetArea );
dockWidget4->resize( 250, 250 );
window->addDockWidget( Qt::LeftDockWidgetArea, dockWidget4 );
dockWidget4->setFloating( true );
dockWidget4->hide();

app.setActiveWindow( window );
window->show();

return app.exec();
}

application.pro:
Код:
TEMPLATE = app
LANGUAGE = C++

CONFIG   += release qt warn_on

SOURCES += main.cpp

TARGET   = application


Название: Re: Мерцание отстегнутых QDockWidget при старте приложения.
Отправлено: GreatSnake от Апрель 26, 2011, 15:09
Поменяй местами:
Код
C++ (Qt)
dockWidget1->setFloating( true );
dockWidget1->hide();
 


Название: Re: Мерцание отстегнутых QDockWidget при старте приложения.
Отправлено: alexman от Апрель 26, 2011, 15:35
Спасибо, работает! Объяснишь, почему надо так?


Название: Re: Мерцание отстегнутых QDockWidget при старте приложения.
Отправлено: GreatSnake от Апрель 26, 2011, 15:40
Потому что при твоём варианте создавалось отстёгнутое окно и сразу показывалось, а уже потом ты его прятал.
В случае, если сначала док спрятать, то после создания отстёгнутого окна оное показываться не будет.