Пишу программку в 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. Не понимаю в чем была проблема
Чем мешает диалоговое окошко Линуксу найти активное дочернее окно ?