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

Frank Mertens frank at cyblogic.de
Fri Jun 4 11:58:57 CEST 2021


No, only QML components need to be uppercase. The C++ and Python code looks 100% the same. The only difference is that the C++ code uses qrc. Must be a bug!-) This is Qt 5.15.

On 03.06.21 15:19, Jason H wrote:
> Why? QML elements are capitalized. They must be. 
> the only exception is js imports: import "app.js" as App
>  
>  
>  
> *Sent:* Thursday, June 03, 2021 at 4:10 AM
> *From:* "Frank Mertens" <frank at cyblogic.de>
> *To:* interest at qt-project.org
> *Subject:* Re: [Interest] QML MenuBar : works with PySide2 but not c++ ?
> 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
>
>
> _______________________________________________ Interest mailing list Interest at qt-project.org https://lists.qt-project.org/listinfo/interest <https://lists.qt-project.org/listinfo/interest>

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


More information about the Interest mailing list