[Interest] QML MenuBar : works with PySide2 but not c++ ?

Frank Mertens frank at cyblogic.de
Thu Jun 3 10:10:57 CEST 2021


Try a lowercase file name, e.g.: "qrc:/menuBar.qml".

;)

On 03.06.21 06:08, Nicholas Yue wrote:
> I copied the qml loading code from another working example, I was just testing a change in the QML content.
>
> I'd have to dig further about the lambda
>
> MenuBar.pro
> ===========
> QT += quick
>
> CONFIG += c++11
>
> # The following define makes your compiler emit warnings if you use
> # any Qt feature that has been marked deprecated (the exact warnings
> # depend on your compiler). Refer to the documentation for the
> # deprecated API to know how to port your code away from it.
> DEFINES += QT_DEPRECATED_WARNINGS
>
> # You can also make your code fail to compile if it uses deprecated APIs.
> # In order to do so, uncomment the following line.
> # You can also select to disable deprecated APIs only up to a certain version of Qt.
> #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
>
> SOURCES += \
>         main.cpp
>
> RESOURCES += main.qrc
>
> # Additional import path used to resolve QML modules in Qt Creator's code model
> QML_IMPORT_PATH =
>
> # Additional import path used to resolve QML modules just for Qt Quick Designer
> QML_DESIGNER_IMPORT_PATH =
>
> # Default rules for deployment.
> qnx: target.path = /tmp/$${TARGET}/bin
> else: unix:!android: target.path = /opt/$${TARGET}/bin
> !isEmpty(target.path): INSTALLS += target
>
> main.qrc
> =======  
> <RCC>
>     <qresource prefix="/">
>         <file>MenuBar.qml</file>
>     </qresource>
> </RCC>
>
>
> On Wed, 2 Jun 2021 at 20:36, Tony Rietwyk <tony at rightsoft.com.au <mailto:tony at rightsoft.com.au>> wrote:
>
>     Hi Nicholas,
>
>     The short answer is because your C++ is doing completely different things to the python code.  :O)
>
>     I'm not sure about using QML.  Have you included the qml file as a resource correctly to access via qrc:?  You aren't checking the result of the engine.load.  Also, why is the lambda exiting the application when the objectCreated matches the url?
>
>     Have run the Qt QML examples?  How is your C++ code different to those?
>
>     Hope that helps, Tony
>
>
>     On 3/06/2021 11:33 am, Nicholas Yue wrote:
>>     Hi,
>>
>>       I am learning about QML.
>>
>>       I would like to find out why the PySide2 loading of the QML file results in a visible window but the C++ one does not. The compiled application runs but no window is displayed.
>>
>>     MenuBar.qml
>>     ===========
>>     import QtQuick 2.4
>>     import QtQuick.Controls 2.13
>>
>>     ApplicationWindow {
>>         visible: true
>>         width: 720
>>         height: 480
>>         title: "simple window"
>>
>>         menuBar: MenuBar{
>>             Menu{
>>                 title: "Menu1"
>>             }
>>
>>             Menu{
>>                 title: "Menu2"
>>             }
>>
>>             Menu{
>>                 title: "&Menu3"
>>             }
>>         }
>>     }
>>
>>     main.cpp
>>     ========
>>     #include <QGuiApplication>
>>     #include <QQmlApplicationEngine>
>>
>>     int main(int argc, char *argv[])
>>     {
>>         QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
>>
>>         QGuiApplication app(argc, argv);
>>
>>         QQmlApplicationEngine engine;
>>         const QUrl url(QStringLiteral("qrc:/MenuBar.qml"));
>>         QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
>>                          &app, [url](QObject *obj, const QUrl &objUrl) {
>>             if (!obj && url == objUrl)
>>                 QCoreApplication::exit(-1);
>>         }, Qt::QueuedConnection);
>>         engine.load(url);
>>
>>         return app.exec();
>>     }
>>
>>     main.py
>>     =======
>>     import sys
>>     from PySide2 import QtCore, QtGui, QtQml
>>
>>     if __name__ == '__main__':
>>
>>         QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
>>         app = QtGui.QGuiApplication(sys.argv)
>>
>>         engine = QtQml.QQmlApplicationEngine()
>>
>>         url = QtCore.QUrl.fromLocalFile('MenuBar.qml')
>>         engine.load(url)
>>         if not engine.rootObjects():
>>             sys.exit(-1)
>>
>>         sys.exit(app.exec_())
>>
>>     -- 
>>     Nicholas Yue
>>     Graphics - Arnold, Alembic, RenderMan, OpenGL, HDF5
>>     Custom Dev - C++ porting, OSX, Linux, Windows
>>     http://au.linkedin.com/in/nicholasyue <http://au.linkedin.com/in/nicholasyue>
>>     https://vimeo.com/channels/naiadtools <https://vimeo.com/channels/naiadtools>
>>
>>     _______________________________________________
>>     Interest mailing list
>>     Interest at qt-project.org <mailto:Interest at qt-project.org>
>>     https://lists.qt-project.org/listinfo/interest <https://lists.qt-project.org/listinfo/interest>
>     _______________________________________________
>     Interest mailing list
>     Interest at qt-project.org <mailto:Interest at qt-project.org>
>     https://lists.qt-project.org/listinfo/interest <https://lists.qt-project.org/listinfo/interest>
>
>
>
> -- 
> Nicholas Yue
> Graphics - Arnold, Alembic, RenderMan, OpenGL, HDF5
> Custom Dev - C++ porting, OSX, Linux, Windows
> http://au.linkedin.com/in/nicholasyue <http://au.linkedin.com/in/nicholasyue>
> https://vimeo.com/channels/naiadtools <https://vimeo.com/channels/naiadtools>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> https://lists.qt-project.org/listinfo/interest

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20210603/d195b7c0/attachment.html>


More information about the Interest mailing list