[SOLVED] Qt5 Property Browser



  • I am in need of a property browser for my project and have made my way to the QtPropertyBrowser widget. The problem is, as far as I can tell, the property browser is written for Qt 4.x.

    Therefore I am unable to build the code with my project. I really don't want to have to go through the code and fix the deprecated functions myself. Is there an up to date version of QtPropertyBrowser I can use with Qt5? Or maybe even a completely different widget I could be using?


  • Lifetime Qt Champion

    Hi,

    Have a look at the qttools module, IIRC you'll find QtPropertyBrowser there

    Hope it helps



  • I pulled from https://git.gitorious.org/qt-solutions/qt-solutions.git

    located https://qt.gitorious.org/qt-solutions/qt-solutions/source/fd22bee22274975c56f1c10d87ee9fd2c0818f83:qtpropertybrowser

    This code uses depecrated functions. In fact, it appears it hasn't been changed in 4 years.

    I'm building my project with Qt5.2.1. As I type this I think i'm realizing i'm pulling from the wrong git.


  • Lifetime Qt Champion

    qttools is part of Qt 5



  • Does this come packaged with the qt download? If so, where? I have been unable to find it.

    Or will I have to clone the repository?



  • Having downloaded and built qttools located "Here":https://qt.gitorious.org/qt/qttools/

    I am still unable to locate QtPropertyBrowser. What am I missing?


  • Lifetime Qt Champion

    The sources for it are in qttools/src/shared/qtpropertybrowser/



  • Thank you for all your help so far. Next question. It would appear this code is meant for static linkage. So I'm just throwing the files into my Visual Studio project using CMake.

    I call QT5_WRAP_CPP() and add the generated moc files directory to my include_directories().

    The problem is, when I build, the moc files are missing class definitions.

    Most if not all of the moc files are missing class definitions for the privately declared classes. Is there something i'm missing perhaps?

    Another question, the qtpropertybrowser code includes the moc files at the end of header files. Since I'm using Qt5 do I even need to do this anymore?

    I haven't had to include moc files for any of my custom widgets and classes.


  • Lifetime Qt Champion

    Rethinking about it, qt-solution's QtPropertyBrowser can be built with Qt 5 without any problem and directly into a lib that you can re-use. So why not use it ?



  • I think I tried that earlier and had issues. I don't remember what though. I'll see what I can do when I get home.



  • Oh, jeez. In my earlier post i stated it seemed like the qtpropertybrowser from qt-solutions was using deprecated functions and i didn't want to have to rewrite it. I'll try again.


  • Lifetime Qt Champion

    I've cloned qt-solution and built it with Qt 5.3 but I've had no special warning about deprecated function



  • I'm giving it a try now. I'm building with VS2012 in combination with CMake.



  • Attempting to build the code with my project.

    qttreepropertybrowser.cpp 486: setMovable is not a member of QHeaderView

    This is just one example.

    qtvariantproperty.cpp 1652: 'qVariantValue' undeclared identifier

    is another.

    I'm also getting the errors that *_moc.cpp have undefined types because they are unable to see the definitions of private classes.

    I will try and build with qt5 but when I linked to the qtpropertybrowser.dll for my project. QtDesigner wouldn't load my CustomWidget.dll. In fact, QtDesigner wouldn't even run because of some kind of dll load order with Qt5Widgets.dll.

    I will report back.


  • Lifetime Qt Champion

    How did you try to build QtPropertyBrowser ?



  • In cmake, I added the *h/*cpp files to my list of source files.

    I called QT5_WRAP_CPP on the qtpropertybrowser header files.
    I added the generated moc files to add_library()

    Example:
    @
    set(TARGET_H
    qtpropertybrowser.h
    qttreepropertybrowser.h
    )

    set(TARGET_SRC
    qtpropertybrowser.cpp
    qtpropertybrowser.cpp
    )

    QT5_WRAP_CPP(QTPROPERTYBROWSER_MOC ${TARGET_H})

    add_library(${PROJECT_NAME} SHARED ${TARGET_SRC} ${QTPROPERTYBROWSER_MOC})
    @

    This is a sample of what i'm doing in my CMakelist.txt. Then I proceed to build with Visual Studio 2012


  • Lifetime Qt Champion

    Why don't you just follow the build instruction to create the QtPropertyBrowser library and use it in your project ?



  • I want to say I've tried that and had issues too. Though I don't remember what. I will give it another try once I get a chance.

    I'm pretty sure I can run:

    @
    conifure -library
    qmake
    nmake
    @



  • Success! Built and linked to the DLL without any issues. Created a custom widget interface and was able to pull it up in QtDesigner.

    I think my original issue with doing it this way was I didn't define QT_QTPROPERTYBROWSER_IMPORT. Which meant my dynamic widget was inheriting from a static class.

    Once again, thank you SGalst for taking time to help.



  • edit: solved


  • Lifetime Qt Champion

    You're welcome !

    If it's now working for you, please update the thread title prepending [solved] so other forum users may know a solution has been found :)



  • Hi,
    could you please summarize what you have done to solve the issue? With QT4 I managed to get a cmake version of qtpropertybrowser and to include it in my project, I cannot migrate to QT5 though...
    Any help?
    Thanks

    EDIT: how can include qtpropertybrowser in my CMakeLists.txt?



  • First off, I was unsuccessful at including the qtpropertybrowser source into my CMake project and building. Just wouldn't work. So what I did was built QtPropertyBrowser as a stand alone dynamic library and then linked that into my CMake project.

    Here's what I did step by step successfully on 3 different PCs.
    Note: I'm running VS2012 and Qt5.2.1

    1. Install Qt to C:\Qt
    2. Set C:\Qt\Qt5.2.1\5.2.1\msvc2012_64_opengl\bin to your PATH
    3. Download QtSolutions to C:\QtSolutions
    4. Run the Native x64 command prompt (VS2012) and cd to C:\QtSolutions\QtProperyBrowser
    5. Follow the given directions in QtPropertyBrowser
      @
      configure -library
      qmake
      nmake
      @

    This will build the dynamic library for you.

    1. From here I wrote a simple Find QtPropertyBrowser for my CMake project.
    2. Link to QtPropertyBrowser in CMake and ensure the import definition is defined (found in header file)
      @
      add_definitions(-DQT_QTPROPERTYBROWSER_IMPORT)
      target_link_libraries(${PROJECT_NAME} ${QTPROPERTYBROWSER_LIBRARIES})
      @

    This was about all I did as far as I can remember. Hope this helps.



  • Thanks you a lot, I finally managed to compile QtPropertyBrowser with Qt5 and cmake tweaking some functions in the code and the cmake configuration files found here: https://github.com/commontk/QtPropertyBrowser.
    The libraries were successfully linked into my project.


Log in to reply
 

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