Кодовые блоки с Qt - что-то ужасно не так - PullRequest
1 голос
/ 04 ноября 2011

После создания проекта qt в кодовых блоках и его запуска я получаю:
enter image description here

Кто-нибудь знает, как его решить?
Спасибо

Ответы [ 2 ]

4 голосов
/ 05 ноября 2011

Мне кажется, что вы создаете одну версию Qt и связываетесь с другой во время выполнения.Запустите QtSDK Maintenance Tool и удалите все ненужные версии Qt Desktop.Затем вам может понадобиться переопределить кодовые блоки с правильными заголовками.

Я предполагаю, что если вы работаете из Codeblocks, вам нужно было явно указать, какие библиотеки использовать при запуске вашего нового приложения.Если это так, убедитесь, что это правильные версии (т.е. замените их на dll из QT INSTALL DIR \ Desktop \ 4.7.x \ mingw \ bin [хотя в данный момент я не на своем рабочем ПК), поэтому этот путь может быть немного неправильным. Просто убедитесь, что вы находитесь в правильной папке 4.7.x ]).

Если честно, если вы работаете из Windows,почему бы не использовать QtCreator?Помимо незначительного отсутствия интеграции GDB, она довольно хороша, и с такими проблемами столкнуться гораздо сложнее.

0 голосов
/ 05 ноября 2011

Это (особенно в Windows) распространенная проблема.При установке Qt SDK вы получите как минимум 2 .dll с тем же именем, но в разных версиях.Бывает, что вы ссылаетесь на предназначенную (dev-) библиотеку, но во время выполнения используется версия из Designer / Creator.

Самый простой способ избежать этого - развернуть правильную версию библиотеки DLL вместе.с вашими двоичными файлами (.exe и прочее) в отдельной папке.Это может быть достигнуто путем изменения вашего сценария сборки.Это зависит от вашей системы сборки, которая обычно является qmake / .pro или cmake / CMakeLists.txt.

Что касается CMake, учитывая переменную окружения MYQTDLLDIR, содержащую путь к файлам для развертывания, вы можете использовать что-тонапример:

configure_file($ENV{MYQTDLLDIR}/QtCore4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
configure_file($ENV{MYQTDLLDIR}/QtGui4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)

документация извлечена из cmake --help-full:

configure_file Скопируйте файл в другое место и измените его содержимое.

configure_file ([COPYONLY] [ESCAPE_QUOTES] [@ONLY])

Копирует файл в файл и подставляет значения переменных, указанные в содержимом файла.Если это относительный путь, он оценивается относительно текущего исходного каталога.Должен быть файлом, а не каталогом.Если это относительный путь, он оценивается относительно текущего двоичного каталога.Если имя существующего каталога указано, входной файл помещается в этот каталог с его исходным именем.

Эта команда заменяет любые переменные во входном файле, на которые ссылаются как $ {VAR} или @ VAR @, на их значения, определенные CMake.,Если переменная
не определена, она будет заменена ничем.Если указано
COPYONLY, то расширение переменной не будет.Если указано ESCAPE_QUOTES, то любые замещенные кавычки будут экранированы в стиле C.Файл будет настроен с текущими значениями переменных CMake.Если задано @ONLY, только переменные вида @ VAR @
будут заменены, а $ {VAR} будет игнорироваться.Это полезно для
настройки сценариев, которые используют $ {VAR}.Любые вхождения #cmakedefine VAR будут заменены либо #define VAR, либо / * #undef VAR * /
в зависимости от настройки VAR в CMake.Любые вхождения
# cmakedefine01 VAR будут заменены либо #define VAR 1, либо #define VAR 0> в зависимости от того, оценивает ли VAR значение TRUE или FALSE в CMake

Что касается qmake, вы можете использоватьINSTALLS (используется при вызове make install) или выполнить «простую команду» после компоновки.Использование INSTALLS :

mytarget.path = /output/path
mytarget.files += /path/to/QtCore4.dll
mytarget.files += /path/to/QtGui4.dll
INSTALLS += mytarget

qmake с использованием выполнения команды:

win32 {
    EXTRA_BINFILES += \
        $${MYQTDLLDIR}/QtCore4.dll \
        $${MYQTDLLDIR}/QtGui4.dll
    EXTRA_BINFILES_WIN = $${EXTRA_BINFILES}
    EXTRA_BINFILES_WIN ~= s,/,\\,g
        DESTDIR_WIN = $${DESTDIR}
    DESTDIR_WIN ~= s,/,\\,g
    for(FILE,EXTRA_BINFILES_WIN){
                QMAKE_POST_LINK +=$$quote(cmd /c copy /y $${FILE} $${DESTDIR_WIN}$$escape_expand(\n\t))
    }
}
...