Making a Qt custom widget without Qt Creator



  • I 'm trying to make a custom widget for Qt (and a plugin for the widget to be visible and active in Qt Designer) in c++.
    I 'm using NetBeans, not Qt Creator (because I have a slow pc, I think Qt Creator would be too 'heavy') and trying to follow this tutorial.
    My problem is I don't know:
    a. where to put these files
    b. how to compile the plugin

    I have Qt 4.8.6 framework at C:\Qt.
    Qt Designer at: C:\Qt\4.8.6\bin

    NetBean 's QMake command: C:\Qt\4.8.6\bin\qmake.exe

    (I see there is and a second qmake.exe at: C:\Qt\4.8.6\qmake)

    Edit: how silly of me, I just installed Qt Creator, it's not heavy at all nor too big!
    Looks very nice! I thought it's 1.2GB, while in fact it's only about 90MB!!!


  • Moderators



  • Ok, now that I've finished with Qt Creator 's installation (I hope :) ) I 'm trying to follow the tutorial you posted jsulm.
    But nowhere is mentioned:
    should I start a new Qt Application? Qt Console Application? or something else? in order to begin the tutorial.
    Maybe New Project->Library->Qt Creator Plugin?
    Or New Project->Other->Qt Custom Designer Widget?



  • From what I understand, I must build the plugin with qmake? Or something like this?
    I 'm lost....


  • Lifetime Qt Champion

    Hi,

    If I may, upgrade your Qt version to Qt 5. Qt 4 has reached EOL so unless you have a very good reason to, don't start new project with it.



  • Yes I have upgraded to 5 already.
    And I m using Qt Creator, not NetBeans.
    But still haven't managed to make any progress in widget creation...despite the tutorials I m reading...


  • Lifetime Qt Champion

    You should have a look at "Qt Custom Designer Widget".



  • Thanks I 've looked at these a few hundrend times, didn't help.
    Looking here and ther,e I conclude that I must compile (with qmake??) the plugin (which serves as a wpapper for the widget), and put it in a folder /desigenr/plugins...



  • I think I 'm close.
    My files are at:
    C:\Documents\QtProjects\mycustomwidget:
    --customwidgetplugin.pro
    --analogclock.h
    --analogclock.cpp
    --customwidgetplugin.h
    --customwidgetplugin.cpp

    I open a console:
    cd C:\Documents\QtProjects\mycustomwidget
    qmake

    And so a file named MakeFile is created. It has, at the top: Command: C:\Qt\5.8\mingw53_32\bin\qmake.exe -o Makefile customwidgetplugin.pro
    I give this command in console, seems like it's doing something, and shows the message: Info: creating stash file C:\Documents\QtProjects\mycustomwidget.qmake.stash

    I open Qt Designer and no new widget is added in it...:(

    Isn't the procedure I follow the correct one?


  • Qt Champions 2016

    @Panoss

    Hi
    just a note
    Unless you compile your own Creator with mingw then
    its not possible to make Designer plugins with
    mingw.
    It has to be vs 2013/ 2015 ( for 5.8)
    Since Creator is build with that compiler and the plugin is an DLL.

    So it sounds good but unless you use visual studio or your own mingw Creator it
    wont work.

    alt text


  • Moderators

    @Panoss To add to @mrjj : it is not enough to execute qmake - qmake is not a compiler, it does not compile your code it just generates Makefiles. After qmake you need to execute make (nmake.exe in case Visual Studio is used) and then make install.



  • @mrjj said in Making a Qt custom widget without Qt Creator:

    @Panoss

    Hi
    just a note
    Unless you compile your own Creator with mingw then
    its not possible to make Designer plugins with
    mingw.
    It has to be vs 2013/ 2015 ( for 5.8)
    Since Creator is build with that compiler and the plugin is an DLL.

    So it sounds good but unless you use visual studio or your own mingw Creator it

    Wow!! this was quite a shock form me! :)
    I 'd rather not to compile it with my MingW, I think this is a very loooong process..

    So you 're saying I should Uninstall Qt Creator + Qt, and install a version:
    a. either With Visual Studio
    b. or a different mingW Creator version?

    If so, I choose the second. But, which MingW + Qt Creator file should I download? (I don't care if it's gonna be Qt 5.8 or any other)


  • Moderators

    @Panoss No. No need to uninstall QtCreator (why should you)? Install Qt for VC2015 and VC2015 (you can get it for free).
    The thing is: you cannot mix different compilers (because of C++, not Qt fault). Since QtCreator is built using VC2015 you have to use VC2015 to write plug-ins for it.
    Official QtCretor is built using VC2015, you cannot use MinGW to write plug-ins for it. As far as I know there is no official QtCreator build made with MinGW.



  • @jsulm said in Making a Qt custom widget without Qt Creator:

    Install Qt for VC2015 and VC2015 (you can get it for free).

    I'll have to uninstall my curent Qt, right? (through on-line installer I mean)


  • Moderators

    @Panoss No need to uninstall your current Qt - you can have as many Qt installations as you like.
    Use Qt Maintenance Tool to add Qt for VC2015.



  • In Qt Maintenance Tool I have these options under Qt 5.8:
    WinRt arm7(MSVC2015)
    WinRt x64 (MSVC2015)
    WinRt x86 (MSVC2015)
    Windows Phone arm (MSVC2013)
    Windows Phone x86(MSVC2013)
    Windows Runtime 8.1 x64 (MSVC2013)
    msvc2013 32-bit
    msvc2015 32-bit

    I suppose I 'll have to choose the 'msvc2015 32-bit', right?


  • Qt Champions 2016

    @Panoss
    yes. as long as it matches the visual studio suite you install later it should be fine.

    Can I ask what goal is ?
    You want to create a custom Designer plugin and use in your windows project or
    what is the plan?
    Or is just to test it out?

    Yes compiling Creator do take some time.
    I didnt use the make install thing.
    I simply copied worldtimeclockplugin.dll to
    M:\1_Creator\qt-creator-build-2\bin\plugins\designer
    (bin\plugins\designer)
    and it was visible in designer.

    So if goal is to produce a real plugin for Designer, then you need visual studio.

    If just for trying it out, we could cheat and i can give u the mingw Creator.
    Its like 50 MB download.
    But for a real project/plugin, the Visual Studio road is better.



  • My goal is to create a real widget (ok plugin which wraps the widget).
    The strange thing is that I managed to create Qt widgets with Python, SO MUCH easier, just two files, one the plugin and one the widget, put in the right place and immediatelly show up in Qt Designer!!!
    I can't believe that with Qt Creator it's so much harder!!!
    Antway...I 'm thinking of using Visual Studio Express 2015.
    Is this suitable as Visual Studio?


  • Qt Champions 2016

    @Panoss
    Im not sure express will work but it might nowadays.
    I only heard of
    https://www.visualstudio.com/vs/community/
    But i can be wrong. I dont use visual studio at all. :)

    The reason for it being hard in C++ than python is the way DLLS works in windows.
    ( and python is not compiled)
    On linux its more easy as there is only gcc compiler.

    Just final question.
    It is easy to use custom plugins without all the plugin code using
    promotion.
    http://doc.qt.io/qt-5/designer-using-custom-widgets.html

    That however do not provide Design time editing of its properties.


  • Moderators

    @Panoss Use Community edition, it is free. Don't forget to select C++ during installation.



  • @mrjj said in Making a Qt custom widget without Qt Creator:

    @Panoss
    Just final question.
    It is easy to use custom plugins without all the plugin code using
    promotion.

    No, I need real widget(plugin).
    Well, I thought of it again, I think I'd better compile Qt Creator with mingw.
    How can I do this?
    According to this...it's a nightmare!!
    Will I have to re-compile if I create a new plugin sometime later?
    Or it's done once and forever?


  • Qt Champions 2016

    @Panoss
    Its sort of a do once and use mingw Creator for ever with that version of Qt
    But in a few version of Qt you might need to recompile Creator.

    Its not a nightmare as such ( webkit is: ) but it does take some (long) time.

    If you plan on others to use your plugin , the VS way is still better :)
    You will still use Creator etc and its just other compiler.

    And no, the whole reason to compile Creator with mingww is so it will load plugins compiled with
    mingw. So as long as you do not upgrade mingw , then no need to ever recompile Creator for a new plugin.

    The normal Creator is compiled with Vs and only like VS compiled plugins.

    So in my opinion, for your use case Visual Studio is better as its how it normally works and
    all other installations of Qt can just use it.



  • Ok, I 'll go for the Visual Studio, you convienced me :).


  • Qt Champions 2016

    @Panoss
    Super. Its fun with plugins.
    We need more , one can never have too many Designer widgets :)

    Final note:
    The debugger is a separate download.
    https://forum.qt.io/topic/60713/setting-visual-studio-2015-debugger/

    optional component called "debugging tools for windows"

    This is often a surprise :)



  • "Optional". So I can live without it, right?
    You mean, 'this is often a good surprise' ?


  • Qt Champions 2016

    @Panoss

    You will need debugger :)
    We all do.
    And no its was not good surprise.
    They come here and say.
    "Program crash"
    and we go like "ok, place a breakpoint and single step the function to find crash point."

    But it can wait till later i guess :)


  • Qt Champions 2016

    Fast question:
    This plugin will run on windows xp?
    The app is for Xp?

    Note that from 5.7 ( think) its not tested on xp.
    Might work or might not. Its not supported.



  • It will run on Win 10, Win 7 and XP.


  • Qt Champions 2016

    @Panoss
    Ok. just asking as XP is not on ppl mind anymore.
    https://forum.qt.io/topic/73292/the-last-qt-version-that-supported-windows-xp

    Sounds like using 5.6 is the best bet :)

    Did u try that version of Creator on xp?

    It didn't start or ?

    Note that Xp in virtual machine do not have openGL (often) and can only work if started with some option
    https://forum.qt.io/topic/36827/qt-creator-3-0-welcome-mode-not-working-in-virtualbox-vm

    like
    c:\path\qtcreator -noload Welcome -noload QmlDesigner -noload QmlProfiler



  • On XP I haven't tried Qt Creator yet.
    I was thinking of trying an older version, and adjusting the code where necessary.


  • Qt Champions 2016

    @Panoss
    well if u go back to Qt4 then all plugin stuff is a bit different. ( from Qt5 series)
    So would be great if 5.6 can be used. :)



  • Ok, I installed VS 2015 and the debugger (Windows 10 SDK).
    Qt Creator auto-detected the VS compiler and a CDB debugger (this must be from Windows 10 SDK).
    This means I 'm ready?
    So how do I compile a plugin to dll?


  • Lifetime Qt Champion

    Start a "Qt Custom Designer Plugin" project and it will be all prepared for that. This one is under "Other project" in the "New File or Project" dialog.



  • I make a New Project->Qt Custom Designer Widget, Name: I enter 'AnalogClock'->Next but I see no VS kit:

    alt text

    And no VS kit is auto detected.
    Maybe I should add manually a VS kit?

    Should I make two projects? The 'main' project in wich the widget will be used, and the project of the widget (plugin)?



  • I tried to add a kit manually, but it raises errors:
    alt text

    (I changed C++ compiler from MingW to VS2015)

    EDIT: Ok, I had forgotten in Maintenance tool to add, at Qt5.8: msvc2015 32-bit, I'm adding it right now.



  • Ok, after adding msvc2015 32-bit in Maintenance tool, everything seems ok.
    I built the poject, and a dll was created(!!wow) in my project 's debug folder.

    I also now have two folders:
    c:\qt\5.8\mingw53_32\bin and
    c:\qt\5.8\msvc2015\bin
    which have a designer.exe inside.
    I run them both (I suppose the one that should show my plugin is the msvc2015\bind\designer.exe) but in none of them appears my plugin.
    Also the dll of my plugin was not copied in any of the folders of c:\qt\5.8.


  • Moderators

    @Panoss Try to copy the manually to plugins/designer directory in your msvc2015 Qt installation.



  • I copied it in C:\Qt\5.8\msvc2015\plugins\designer, but it failed: 'uses incompatible Qt library. Cannot mix debug and release libraries':
    alt text


  • Qt Champions 2016

    @Panoss
    Try to build it in Release mode and then copy.



  • In the Qt Creator 's 'Release' button, I chose 'release', and build.
    In folder C:\Documents\QtProjects\AnalogClockB\build-AnalogClockB-Desktop_Qt_5_8_0_MSVC2015_32bit-Release\release
    a dll was created!!! I copied it in C:\Qt\5.8\msvc2015\plugins\designer....and...it appeared in Qt Designer!!! Wow!!

    Thank you all guys, your help was great!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.