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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Мерцание отстегнутых QDockWidget при старте приложения.  (Прочитано 3077 раз)
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
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 26, 2011, 15:09 »

Поменяй местами:
Код
C++ (Qt)
dockWidget1->setFloating( true );
dockWidget1->hide();
 
Записан

Qt 5.11/4.8.7 (X11/Win)
alexman
Гость
« Ответ #2 : Апрель 26, 2011, 15:35 »

Спасибо, работает! Объяснишь, почему надо так?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 26, 2011, 15:40 »

Потому что при твоём варианте создавалось отстёгнутое окно и сразу показывалось, а уже потом ты его прятал.
В случае, если сначала док спрятать, то после создания отстёгнутого окна оное показываться не будет.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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