Обнаружил в Qt такую проблему. Есть обычное главное окно программы:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
~MainWindow();
void restoreWindowGeometry(void);
}
void MainWindow::restoreWindowGeometry(void)
{
restoreGeometry( Тут_байты_с_геометрией );
}
Если вызывать метод восстановления геометрии окна restoreGeometry() до старта основного цикла приложения, например так:
int main(int argc, char ** argv)
{
MainWindow win;
win.restoreWindowGeometry();
return app.exec();
}
То в некоторых оконных средах, например в OpenBox+LXDE, положение окна восстанавливается со смещением на размер заголовка окна и толщины обрамления. (В KDE4 и Gnome2, кстати, этой проблемы нет).
Если же вызвать restoreGeometry() после того, как основной цикл запущен, то восстановление геометрии происходит правильно.
Таким образом, вызывать восстановление геометрии надо после того, как запущен основной цикл приложения. Хотелось бы, чтобы главное окно само вызвало восстановление геометрии в нужный момент. Проблема в том, как этот момент отловить.
Пока я вижу только громоздкую конструкцию:
1. Сделать промежуточный класс, унаследованный от QApplication, и в методе exec() выставлять флаг что основной цикл запущен. Сделать в этом классе метод isRunning(), возвращающий этот флаг.
2. В классе MainWindow сделать таймер с минимальной задержкой, который будет крутиться до того момента, пока isRunning() приложения не вернет true. И тогда сделать вызов restoreGeometry().
Но как-то это очень громоздко. Может быть можно воспользоваться каким-нибудь сигналом у QApplication или у QMainWindow, которые среботают после запуска основного цикла? Но только я таких сигналов не нашел.