Additional style plugins
-
Hello forum,
I upgraded Qt from 4.7 to 5.2.1 and used QCleanlooksstyle in my project.
on "https://codereview.qt-project.org/#change,75758" I found the additional styles.
So I checked all out from the repository, opened the .pro file in QtCreator and compiled all successfully.
After that I installed the plugins with "make install". Everything looked good.in my .pro file I added the line: QTPLUGIN += qcleanlooksstyle
In the main window constructor I added qApp->setStyle(new QCleanlooksStyle());and get the linker error:
undefined reference to `QCleanlooksStyle::QCleanlooksStyle()'What is wrong?
-
Hi and welcome to devnet,
Did you build your plugin statically ? QTPLUGIN is only needed in this case
-
Hi , thanks for answering
No I linked it dynamically. After compilation and installation I found in my Qt installation a new folder
/$HOME/Qt5.2.1/5.2.1/gcc_64/plugins/styles/
with three libs
libqcleanlooksstyle.so
libqmotifstyle.so
libqplastiquestyle.soI'd like to carry on using cleanlooksstyle as I did with Qt 4.7.
but get always the error message. -
IIRC, you would need to use "this version":http://qt-project.org/doc/qt-5/qapplication.html#setStyle-2 of setStyle
-
Well that works fine now when linking dynamically.
After that I linked the plugins statically and tried again with static linking to my project.
I have now additional the libs
libqcleanlooksstyle.a
libqmotifstyle.a
libqplastiquestyle.aNow qmake says:
Project WARNING: Plugin class name could not be determined for qcleanlooksstyle plugin. -
Did you setup your project to use static plugins ?
-
I think I have. I compiled a static version of Qt for testing purposes and start it on second computer without any Qt installation and it works.
I have to import mysql plugin in the static version and it works.
Is it possible that Qtcreator can't find the new folder "styles" because it is not in any "...PATH" variable?
If it is where can i add it? -
I looked around in the modules folder of my static Qt and found several .pri files. I found qt_plugin_qcleanlooksstyle.pri with the following content
QT_PLUGIN.qcleanlooksstyle.TYPE = styles
QT_PLUGIN.qcleanlooksstyle.CLASS_NAME =After that I opened the .pri file of a working plugin qt_plugin_qsqlmysql.pri
QT_PLUGIN.qsqlmysql.TYPE = sqldrivers
QT_PLUGIN.qsqlmysql.CLASS_NAME = QMYSQLDriverPluginIt seemed, that in the style pri file the class name is misssing. So I added the class name to the file.
QT_PLUGIN.qcleanlooksstyle.TYPE = styles
QT_PLUGIN.qcleanlooksstyle.CLASS_NAME =QCleanlooksStyleqmake was satisfied with this solution, BUT at link time another error occured :
undefined reference to `qt_static_plugin_QCleanlooksStyle()Something goes wrong ????
-
It looks like the static plugin is not found, are you sure you have it at the right place ?
-
The place seems to be ok. I rebuild the plugins and added the class name in the modules file ( see post above ). qmake finds the plugin now.
BUT:
@g++ -Wl,-O1 -o DockWidgets main.o MainWindow.o dockwidgets_plugin_import.o moc_MainWindow.o -L/home/jaensch/QtStatic5.2.1/lib -L/home/jaensch/QtStatic5.2.1/plugins/styles -lqcleanlooksstyle -lQt5Widgets -lgobject-2.0 -L/home/jaensch/QtStatic5.2.1/plugins/sqldrivers -lqsqlmysql -lmysqlclient_r -lssl -lcrypto -lqsqlite -lQt5Sql -L/home/jaensch/QtStatic5.2.1/plugins/platforms -lqxcb -lX11-xcb -lXi -lSM -lICE -ldbus-1 -lxcb -L/home/jaensch/Downloads/qt-everywhere-opensource-src-5.2.1/qtbase/src/plugins/platforms/xcb/xcb-static -lxcb-static -L/home/jaensch/Downloads/qt-everywhere-opensource-src-5.2.1/qtbase/lib -lxkbcommon -lQt5PlatformSupport -lfontconfig -lfreetype -lXrender -lXext -lX11 -lQt5DBus -lQt5Gui -ljpeg -lpng -lEGL -lQt5Core -lz -licui18n -licuuc -lpcre16 -lm -ldl -lgthread-2.0 -pthread -lglib-2.0 -lrt -lGL -lpthread
/home/jaensch/QtStatic5.2.1/lib/libQt5Widgets.a(qstylehelper.o): In functionQStyleHelper::uniqueName(QString const&, QStyleOption const*, QSize const&)': qstylehelper.cpp:(.text+0x190): multiple definition of
QStyleHelper::uniqueName(QString const&, QStyleOption const*, QSize const&)'
/home/jaensch/QtStatic5.2.1/plugins/styles/libqcleanlooksstyle.a(qstylehelper.o):qstylehelper.cpp:(.text+0x190): first defined here
/home/jaensch/QtStatic5.2.1/lib/libQt5Widgets.a(qstylehelper.o): In functionQStyleHelper::calcBigLineSize(int)': qstylehelper.cpp:(.text+0xdf0): multiple definition of
QStyleHelper::calcBigLineSize(int)'
/home/jaensch/QtStatic5.2.1/plugins/styles/libqcleanlooksstyle.a(qstylehelper.o):qstylehelper.cpp:(.text+0xd10): first defined here
/home/jaensch/QtStatic5.2.1/lib/libQt5Widgets.a(qstylehelper.o): In functionQStyleHelper::angle(QPointF const&, QPointF const&)': qstylehelper.cpp:(.text+0xe20): multiple definition of
QStyleHelper::angle(QPointF const&, QPointF const&)'
/home/jaensch/QtStatic5.2.1/plugins/styles/libqcleanlooksstyle.a(qstylehelper.o):qstylehelper.cpp:(.text+0xd40): first defined here
/home/jaensch/QtStatic5.2.1/lib/libQt5Widgets.a(qstylehelper.o): In functionQStyleHelper::drawBorderPixmap(QPixmap const&, QPainter*, QRect const&, int, int, int, int)': qstylehelper.cpp:(.text+0xf10): multiple definition of
QStyleHelper::drawBorderPixmap(QPixmap const&, QPainter*, QRect const&, int, int, int, int)'
/home/jaensch/QtStatic5.2.1/plugins/styles/libqcleanlooksstyle.a(qstylehelper.o):qstylehelper.cpp:(.text+0xe30): first defined here
/home/jaensch/QtStatic5.2.1/lib/libQt5Widgets.a(qstylehelper.o): In functionQStyleHelper::calcLines(QStyleOptionSlider const*)': qstylehelper.cpp:(.text+0x1560): multiple definition of
QStyleHelper::calcLines(QStyleOptionSlider const*)'
/home/jaensch/QtStatic5.2.1/plugins/styles/libqcleanlooksstyle.a(qstylehelper.o):qstylehelper.cpp:(.text+0x1480): first defined here
/home/jaensch/QtStatic5.2.1/lib/libQt5Widgets.a(qstylehelper.o): In functionQStyleHelper::drawDial(QStyleOptionSlider const*, QPainter*)': qstylehelper.cpp:(.text+0x1aa0): multiple definition of
QStyleHelper::drawDial(QStyleOptionSlider const*, QPainter*)'
/home/jaensch/QtStatic5.2.1/plugins/styles/libqcleanlooksstyle.a(qstylehelper.o):qstylehelper.cpp:(.text+0x19c0): first defined here
collect2: error: ld returned 1 exit status
make: *** [DockWidgets] Error 1
08:22:26: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project DockWidgets (kit: Static Desktop Qt 5.2.1 GCC 64bit)
When executing step 'Make'
08:22:26: Elapsed time: 00:02.@????
-
The static plugins are built in Qt so your use case is special. What you can do since you already build Qt yourself is to integrate it to Qt