Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QDockWidget raise

Автор: DEADHUNT 18.7.2010, 11:31

QDockWidget *dockWidget = ...;
restoreDockWidget(dockWidget); // from QMainWindow
dockWidget->raise();

Если dockWidget уже является видимым то raise нормально работает, и делает его активным, но если dockWidget был закрыт, то после выполнения данного кода dockWidget восстанавливается, но не становится активным(raise не работает). Покопавшись в коде restoreDockWidget увидел там вызов какого-то сигнала через QMetaObject::invoke, может на момент вызова raise dockWidget ещё не восстанавливается, и поэтому функции raise ничего не делает.
придумал такое решение:
QDockWidget *dockWidget = ...;
restoreDockWidget(dockWidget);
QTime::singleShot(100, dockWidget, SLOT(raise());
dockWidget->raise();

Может можно сделать лучше?

Автор: Litkevich Yuriy 18.7.2010, 13:34

помимо raise() есть ещё activateWindow() обычно их используют на пару

Автор: DEADHUNT 18.7.2010, 13:51

Пробовал и вместе и по отдельности, эффект тот же самый что если QDockWidget был закрыт, то после вызова restoreDockWidget и последующего вызова raise он не делается активным(среди множества объединённых dock widget`ов). Может это Qt bug?

Автор: Litkevich Yuriy 18.7.2010, 14:19

Цитата(DEADHUNT @ 18.7.2010, 17:51) *
Может это Qt bug?
надо порыться в трекере, может и такое быть

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)