Название: Работа Qt приложения под Windows и Linux Отправлено: foufou от Сентябрь 03, 2010, 19:43 Пишу программку в Qt Creator, имея на компе Windows. Решил проверить как оно работает под линуксом. Линукс мне принесли на загрузочной флешке, загрузился, запустил установленный на этой флешке Qt Creator и запустил свою программку. Оказалось, кое-что из того, что работает под Windows, отказывается работать под Линукс.
У меня MDI приложение. Есть главное окно и дочерние окна. Чтобы сделать нечто в активном дочернем окошке вызываю модальное диалоговое окно и по нажатию на кнопку ОК делаю, что хотел. В частности, добавляю колонки в таблице QTableWidget. Число колонок, которые необходимо добавить получаю из диалогового окна. Под виндой все работает, а вот под Линукс работать отказывается. Следующий код работает под Windows, но не работает под Linux: Цитировать void MainWindow::addNewColumns() { dialogAddColumns *dialogAddCols = new dialogAddColumns; if (dialogAddCols->exec() == QDialog::Accepted) { QMdiSubWindow *activeSubWindow = mdiArea->activeSubWindow(); if (activeSubWindow) // под Линуксом это условие никогда не выполняется !!! { Добавить колонки... } } } Что значит программа не работает ? Просто во внутренний if программа никогда не заходит, как-будто нет никакого активного дочернего окна. Опытным путем установил, что проблему можно решить, если вынести строку QMdiSubWindow *activeSubWindow = mdiArea->activeSubWindow() выше - туда, где диалоговое окно еще не объявляется: Цитировать void MainWindow::addNewColumns() { QMdiSubWindow *activeSubWindow = mdiArea->activeSubWindow(); dialogAddColumns *dialogAddCols = new dialogAddColumns; if (dialogAddCols->exec() == QDialog::Accepted) { if (activeSubWindow) { Добавить колонки... } } } Вот это работает и под Windows, и под Linux. Не понимаю в чем была проблема ??? Чем мешает диалоговое окошко Линуксу найти активное дочернее окно ? Название: Re: Работа Qt приложения под Windows и Linux Отправлено: Sancho_s_rancho от Сентябрь 03, 2010, 20:47 Мне видется, что после модального окна нет фукуса ни на одном окошке области mdi. Т.е. в винде окошко после диалога сново фокус получает, а в линукс - нет. Может это фича такая, может бага.
Название: Re: Работа Qt приложения под Windows и Linux Отправлено: foufou от Сентябрь 03, 2010, 21:07 Мне видется, что после модального окна нет фукуса ни на одном окошке области mdi. Т.е. в винде окошко после диалога сново фокус получает, а в линукс - нет. Может это фича такая, может бага. Спасибо ! Очень похоже, что так оно и есть. Получается, что надо запоминать кто из дочерних окон в фокусе еще до открытия диалогового окна, т.е. так, как я это и попытался сделать. Просто не всегда это удобно. Название: Re: Работа Qt приложения под Windows и Linux Отправлено: Pretorean от Сентябрь 04, 2010, 00:17 Код: dialogAddColumns *dialogAddCols = new dialogAddColumns(this); |