![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
SABROG |
![]() ![]()
Сообщение
#1
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Хочу такую красавицу внедрить в свое приложение:
![]() Тема называется Skulpture. Но проблема в том, что она доступна только в KDE, хотя вроде бы и создана для Qt. Может кто-нибудь знает как её использовать под виндой? Опаньки, кажись есть еспехи. Цитата C:\SABROG\skulpture-0.2.2.5>cmake -G "MinGW Makefiles"
-- Check for working C compiler: C:/MinGW/bin/gcc.exe -- Check for working C compiler: C:/MinGW/bin/gcc.exe -- works -- Check size of void* -- Check size of void* - done -- Check for working CXX compiler: C:/MinGW/bin/g++.exe -- Check for working CXX compiler: C:/MinGW/bin/g++.exe -- works -- Looking for Q_WS_X11 -- Looking for Q_WS_X11 - not found. -- Looking for Q_WS_WIN -- Looking for Q_WS_WIN - found -- Looking for Q_WS_QWS -- Looking for Q_WS_QWS - not found. -- Looking for Q_WS_MAC -- Looking for Q_WS_MAC - not found. -- Found Qt-Version 4.5.0 WARNING: *** KDE4 not found, building a Qt-only version of Skulpture *** -- Configuring done -- Generating done -- Build files have been written to: C:/SABROG/skulpture-0.2.2.5 C:\SABROG\skulpture-0.2.2.5>mingw32-make [ 33%] Generating skulpture_p.moc [ 66%] Generating skulpture.moc Scanning dependencies of target skulpture [100%] Building CXX object src/CMakeFiles/skulpture.dir/skulpture.obj C:\SABROG\skulpture-0.2.2.5\src\skulpture.cpp: In function `QRect progressBarCon tentsRect(const QStyleOptionProgressBarV2*, bool)': C:\SABROG\skulpture-0.2.2.5\src\skulpture.cpp:6642: warning: converting to `int' from `double' C:\SABROG\skulpture-0.2.2.5\src\skulpture.cpp:6654: warning: converting to `int' from `double' C:\SABROG\skulpture-0.2.2.5\src\skulpture.cpp: In function `void paintProgressBa rContents(QPainter*, const QStyleOptionProgressBarV2*, const QWidget*, const QSt yle*)': C:\SABROG\skulpture-0.2.2.5\src\skulpture.cpp:6843: warning: passing `double' fo r converting 2 of `QPoint::QPoint(int, int)' Linking CXX shared library libskulpture.dll Creating library file: libskulpture.dll.a [100%] Built target skulpture Сообщение отредактировал SABROG - 24.3.2009, 0:36 |
|
|
FladeX |
![]()
Сообщение
#2
|
Студент ![]() Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А можно подробнее про такие манипуляции со стилями? Что нужно, чтобы прикрутить к своей программе нестандартный стиль?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
SABROG |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
У меня возникла проблемка. Хоть стиль и собрался, но нивкакую не хочет работать
![]() Цитата QFactoryLoader::QFactoryLoader() looking at "C:/sabrog/qt-win-opensource-src-4.5 .0/plugins/styles/libskulpture.dll" "The plugin 'C:/sabrog/qt-win-opensource-src-4.5.0/plugins/styles/libskulpture.d ll' uses incompatible Qt library. (Cannot mix debug and release libraries.)" not a plugin Вот думаю теперь как так не плагин и как так не релиз, если компилилось все в релизе и программа и плагин и в исходниках стиля явно интерфейс плагина определен:
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#5
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
а ты Qt тоже с помощью CMake собирал? может в опициях компилятора при сборке отличия всетаки вкрались?
|
|
|
SABROG |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
а ты Qt тоже с помощью CMake собирал? может в опициях компилятора при сборке отличия всетаки вкрались? Возможно. Сейчас через профайлер Dependency Walker попробовал запустить, такое получил: Цитата Loaded "LIBSKULPTURE.DLL" at address 0x018D0000. Successfully hooked module. LoadLibraryExW("C:\sabrog\qt-win-opensource-src-4.5.0\plugins\styles\libskulpture.dll", 0x00000000, DONT_RESOLVE_DLL_REFERENCES) returned 0x018D0000. GetProcAddress(0x018D0000 [LIBSKULPTURE.DLL], "qt_plugin_query_verification_data") called from "QTCORE4.DLL" at address 0x10154ADC and returned 0x018D12D0. Unloaded "LIBSKULPTURE.DLL" at address 0x018D0000. Правда пришлось ветку Trolltech из реестра убить, а то он кеширует неудачные попытки загрузить модуль и далее не пытается. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
смотри в асистенте, я точно непомнь где. Для отладки плагинов можно в pro-файлы какой-то макрос записать, тогда небудет учитываться ключ сборки при попытке загрузить плагин, и при включеной, в проект, консоли в нее посыпится более подробная информация о проблемах.
|
|
|
SABROG |
![]()
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
смотри в асистенте, я точно непомнь где. Для отладки плагинов можно в pro-файлы какой-то макрос записать, тогда небудет учитываться ключ сборки при попытке загрузить плагин, и при включеной, в проект, консоли в нее посыпится более подробная информация о проблемах. Именно благодаря этому ключу (QT_DEBUG_PLUGINS) я и получил предыдущие ошибки, так то он молчит как партизан. Попробовал стабильную версию, уже на другом компьютере. Возникли проблемы со сборкой, пришлось патчить CMAKE файл, после сборки история повторилась. Qt похоже не совсем объективна, выдает одно и то же сообщение на любую возникшую ошибку с плагином. Сообщение отредактировал SABROG - 23.3.2009, 22:08 |
|
|
SABROG |
![]()
Сообщение
#9
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Кажется есть продвижение. Решил для теста собрать программу в отладочном режиме. Не знаю почему, но скульптура собирается только в debug режиме и на это никак нельзя повлиять через CMAKE. Хотя если честно, то я вроде бы вижу везде надпись release. Как бы там нибыло я получил следующее:
![]() Пойду теперь собирать последний снапшот, может чего поменяется... --- Собрал, изменений нет никаких. Зато на ум пришла плохая мысль о том как легко подсунуть вирус вместо плагина и он будет запускаться с каждой программой написанной на Qt... Похоже причина кроется в том, что один и тот же модуль загружается 2 раза: http://www.qtsoftware.com/developer/task-t...y&id=197601 Думаю чего делать дальше... --- В общем до меня дошло, что в PATH прописан путь к .dllкам Qt, но проблема в том, что ни в папке с exe ни с плагином этих .dll небыло, поэтому каждый из модулей пытался загрузить свою копию вместо того, чтобы .exe загрузило все Qtшные dll'ки и предоставила возможность пользоваться ими - плагину. Теперь видимых ошибок не наблюдается и среди доступных стилей есть скульптура: Цитата "Skulpture" "Windows" "Motif" "CDE" "Plastique" "Cleanlooks" Но, к сожалению метод QStyle *skulpture = QStyleFactory::create(QLatin1String("Skulpture")); возвращает нулевой указатель. Думаю дальше... --- Я в шоке. Всего-лишь одну строку изменил в исходниках скульптора и теперь программа вообще не добавляет в список фабрики стилей этот стиль. Причем изменил все обратно и все-равно не выводит. Блин, переменные окружения сами по себе слетают. Теперь такую хрень получаю: Цитата "Cannot load library D:/work/qt-win-opensource-src-4.5.0/plugins/styles/libskulpture.dll: ═х эрщфхэ єърчрээ√щ ьюфєы№." could not load Форменное издевательство ![]() --- Снова прошелся через dependency walker. Народ вы не поверите. Плагин требует релизные QtCore4.dll и QtGui4.dll, при это сам отказывается грузится с релизной программой выдавая ошибку о различных потоках, ибо там уже идет микс дебага с релизом. Внимание, вопрос! Зачем плагин прикидывается дебажным, при этом являясь релизным? ![]() Сообщение отредактировал SABROG - 23.3.2009, 23:48 |
|
|
ViGOur |
![]()
Сообщение
#10
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Когда начинаются такие гляки как у тебя в последнем посте, помогает полная перекомпиляция с очисткой прошлой. Только сегодня очередной раз наткнулся на этот глюк. У меня в дебажной версии все работало отлично без сехов и прочего, но в релизе не хотело работать и брейкпоинты шли незнамо куда.
p.s. я работаю в основном со студией. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 1.9.2024, 6:00 |