Это так, заметки для себя. Частичный перевод.
Модульность Qt требует некоторых изменений конфигурации проекта, при переносе его с Qt4 на Qt5. Это, использование иных подключаемых заголовочных файлов, и иная конфигурация проекта (изменения в * .pro файле).
Добавить в ваш *.pro файл:
А так же заменить везде
на
Этого в принципе достаточно, но иногда вам может потребоваться, чтобы подключение заголовочного файла было более явным:
А так же заменить везде
на
Если ваш код имеет следующие строки:
добавьте следующую строку в ваш файл проекта:
И опять же, подключение заголовочных фалов должно быть таким:
Замените все экземпляры
fromAscii ()
ToAscii ()
на
fromLatin1 ()
toLatin1 ()
Например, если код Qt4 был следующим:
То в Qt5 он должен быть изменен на:
Нужно совершить замену как в примере ниже.
Код в Qt4:
В Qt5 должен быть заменен на:
Этот класс в Qt5 устарел и был заменен классом QMdiArea. Новый класс имеет аналогичный API как и у QWorkspace и при переносе приложений где он используется нужно будет изменить названия нескольких методов, сигналов и слотов. А так же заменить везде:
На
Приложения Qt4 имеющие подобную строку
при компиляции в Qt5 будут выдавать ошибку
Для исправления, подключите заголовочный файл:
Появляется ошибка:
Чтобы решить эту проблему замените qFindChildren на findChildren, например, следующий код:
должен быть изменен на код:
Появляется ошибка:
Например, код в Qt4:
В Qt5 меняем на:
И так же, например, код в Qt4:
В Qt5 меняем на:
Замените
На
Появляется ошибка:
Например, код в Qt4:
В Qt5 меняем на:
Появляется ошибки:
Например, код в Qt4:
В Qt5 меняем на:
Если у вас есть в файле проектастрока CONFIG+=qtestlib компилятор предупредит вас в окне компиляции, но код будет работать как обычно
Следующий код в Qt4
В Qt5 вызывает появление ошибки
Для исправления, добавте в файл проекта строку
Появляется ошибки:
В Qt4, QtConcurrent был частью QtCore, и не было необходимости подключать дополнительные заголовочные файлы. Но в Qt5 использование QtConcurrent иначе. Например, если есть код
То нужно подключить заголовочный файл:
и добавить следующую строку в файл проекта:
Нужна перекомпиляция исходников.
Этот документ перевод этого.
Так же рекомендуемая литература:
C++ API Changes
The porting guide
Porting Desktop Applications from Qt 4 to Qt 5
Porting from Qt 4 to Qt 5
Automated porting from Qt 4 to Qt 5
Модульность Qt требует некоторых изменений конфигурации проекта, при переносе его с Qt4 на Qt5. Это, использование иных подключаемых заголовочных файлов, и иная конфигурация проекта (изменения в * .pro файле).
QtWidgets в Qt5 это отдельный модуль
Пример ошибки компиляции
Решение
Добавить в ваш *.pro файл:
А так же заменить везде
на
Этого в принципе достаточно, но иногда вам может потребоваться, чтобы подключение заголовочного файла было более явным:
QtWebKitWidgets в Qt5 это так же отдельный модуль
Пример ошибки компиляции
Решение
Добавить в ваш *.pro файл:
А так же заменить везде
на
QPrinter в Qt5
Если ваш код имеет следующие строки:
добавьте следующую строку в ваш файл проекта:
И опять же, подключение заголовочных фалов должно быть таким:
Методы ToAscii() и fromAscii() в Qt5 считаются устаревшими
Замените все экземпляры
fromAscii ()
ToAscii ()
на
fromLatin1 ()
toLatin1 ()
Например, если код Qt4 был следующим:
То в Qt5 он должен быть изменен на:
QCoreApplication::UnicodeUTF8 в Qt5 устарела
Нужно совершить замену как в примере ниже.
Код в Qt4:
В Qt5 должен быть заменен на:
QWorkspace в Qt5 устарела
Этот класс в Qt5 устарел и был заменен классом QMdiArea. Новый класс имеет аналогичный API как и у QWorkspace и при переносе приложений где он используется нужно будет изменить названия нескольких методов, сигналов и слотов. А так же заменить везде:
На
Проблемы в Qt5 с QDrag
Приложения Qt4 имеющие подобную строку
при компиляции в Qt5 будут выдавать ошибку
Для исправления, подключите заголовочный файл:
qFindChildren в Qt5 устарела
Появляется ошибка:
Чтобы решить эту проблему замените qFindChildren на findChildren, например, следующий код:
должен быть изменен на код:
qVariantValue в Qt5 устарела
Появляется ошибка:
Например, код в Qt4:
В Qt5 меняем на:
И так же, например, код в Qt4:
В Qt5 меняем на:
qVariantCanConvert в Qt5 устарела
Замените
На
Qt::escape в Qt5 устарела
Появляется ошибка:
Например, код в Qt4:
В Qt5 меняем на:
QDesktopServices::storageLocation в Qt5 устарела
Появляется ошибки:
Например, код в Qt4:
В Qt5 меняем на:
CONFIG+=qtestlib в Qt5 устарела
Если у вас есть в файле проектастрока CONFIG+=qtestlib компилятор предупредит вас в окне компиляции, но код будет работать как обычно
Причуды в Qt5 с QWeakPointer
Следующий код в Qt4
В Qt5 вызывает появление ошибки
Для исправления, добавте в файл проекта строку
Если в Qt5 пропала библиотека QtConcurrent
Появляется ошибки:
В Qt4, QtConcurrent был частью QtCore, и не было необходимости подключать дополнительные заголовочные файлы. Но в Qt5 использование QtConcurrent иначе. Например, если есть код
То нужно подключить заголовочный файл:
и добавить следующую строку в файл проекта:
В Qt5 точность QTimer по умолчанию больше не до миллисекунд
В Qt5 QUrl addQueryItem переехал в QUrlQuery
В Qt5 QAbstractItemModel изменен
Qt5 - Развертывание на системах без C++11
Нужна перекомпиляция исходников.
Fixing #include<> Headers
Этот документ перевод этого.
Так же рекомендуемая литература:
C++ API Changes
The porting guide
Porting Desktop Applications from Qt 4 to Qt 5
Porting from Qt 4 to Qt 5
Automated porting from Qt 4 to Qt 5
Комментариев нет:
Отправить комментарий