crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> [Решено] Стиль skulpture
SABROG
  опции профиля:
сообщение 23.3.2009, 15:08
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Хочу такую красавицу внедрить в свое приложение:



Тема называется 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
4 страниц V   1 2 3 > »   
Начать новую тему
Ответов (1 - 9)
FladeX
  опции профиля:
сообщение 23.3.2009, 15:54
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 20.2.2009
Пользователь №: 564

Спасибо сказали: 0 раз(а)




Репутация:   0  


А можно подробнее про такие манипуляции со стилями? Что нужно, чтобы прикрутить к своей программе нестандартный стиль?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.3.2009, 16:18
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(FladeX @ 23.3.2009, 18:54) *
Что нужно, чтобы прикрутить к своей программе нестандартный стиль?
посмотри демку %QTDIR%\demos\affine
там использован стиль Артур, нестандартный
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 23.3.2009, 16:49
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


У меня возникла проблемка. Хоть стиль и собрался, но нивкакую не хочет работать :)

Цитата
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


Вот думаю теперь как так не плагин и как так не релиз, если компилилось все в релизе и программа и плагин и в исходниках стиля явно интерфейс плагина определен:

class SkulptureStylePlugin : public QStylePlugin
{
    public:
        QStringList keys() const {
            return QStringList(QLatin1String("Skulpture"));
        }

        QStyle *create(const QString &key) {
            if (key.toLower() == QLatin1String("skulpture")) {
                return new SkulptureStyle;
            }
            return 0;
        }
};


Q_EXPORT_PLUGIN2(skulpture, SkulptureStylePlugin)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.3.2009, 16:59
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а ты Qt тоже с помощью CMake собирал? может в опициях компилятора при сборке отличия всетаки вкрались?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 23.3.2009, 17:04
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 23.3.2009, 16:59) *
а ты 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
  опции профиля:
сообщение 23.3.2009, 17:08
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


смотри в асистенте, я точно непомнь где. Для отладки плагинов можно в pro-файлы какой-то макрос записать, тогда небудет учитываться ключ сборки при попытке загрузить плагин, и при включеной, в проект, консоли в нее посыпится более подробная информация о проблемах.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 23.3.2009, 17:32
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 23.3.2009, 17:08) *
смотри в асистенте, я точно непомнь где. Для отладки плагинов можно в pro-файлы какой-то макрос записать, тогда небудет учитываться ключ сборки при попытке загрузить плагин, и при включеной, в проект, консоли в нее посыпится более подробная информация о проблемах.

Именно благодаря этому ключу (QT_DEBUG_PLUGINS) я и получил предыдущие ошибки, так то он молчит как партизан.

Попробовал стабильную версию, уже на другом компьютере. Возникли проблемы со сборкой, пришлось патчить CMAKE файл, после сборки история повторилась. Qt похоже не совсем объективна, выдает одно и то же сообщение на любую возникшую ошибку с плагином.

Сообщение отредактировал SABROG - 23.3.2009, 22:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 23.3.2009, 22:18
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Кажется есть продвижение. Решил для теста собрать программу в отладочном режиме. Не знаю почему, но скульптура собирается только в 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, при это сам отказывается грузится с релизной программой выдавая ошибку о различных потоках, ибо там уже идет микс дебага с релизом. Внимание, вопрос! Зачем плагин прикидывается дебажным, при этом являясь релизным? :db:

Сообщение отредактировал SABROG - 23.3.2009, 23:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 24.3.2009, 0:02
Сообщение #10


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


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

p.s. я работаю в основном со студией.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.10.2024, 0:27