Qt Quick-如何仅通过c ++代码与qml属性进行交互

问题描述 投票:0回答:1

在用Visual Studio 2019编写的Qt5项目中,我必须与c ++类中的几个qml属性进行非常密切的沟通。更确切地说,我需要能够从我的c ++类中更改qml窗口的x,y,width和height属性,并且当这些属性更改时,我还需要接收通知,并且当然知道新值。] >

通过在qml端编写部分代码,我可以找到以下解决方案:

qml文件:

...
ApplicationWindow
{
    id: mainWindow
    ...
    onXChanged: {if (mfMainFormHelper) mfMainFormHelper.onFormXChanged(mainWindow.x);}
    onYChanged: {if (mfMainFormHelper) mfMainFormHelper.onFormYChanged(mainWindow.y);}
    onWidthChanged: {if (mfMainFormHelper) mfMainFormHelper.onFormWidthChanged(mainWindow.width);}
    onHeightChanged: {if (mfMainFormHelper) mfMainFormHelper.onFormHeightChanged(mainWindow.height);}

    Connections
    {
        target: mfMainFormHelper

        onDoChangeX:
        {
            mainWindow.x = value;
        }

        onDoChangeY:
        {
            mainWindow.y = value;
        }

        onDoChangeWidth:
        {
            mainWindow.width = value;
        }

        onDoChangeHeight:
        {
            mainWindow.height = value;
        }
    }
    ...

WQtMainFormHelper.h

class WQtMainFormHelper : public QObject
{
    Q_OBJECT

    Q_SIGNALS:
        void doChangeX(int value);
        void doChangeY(int value);
        void doChangeWidth(int value);
        void doChangeHeight(int value);
    ...
    public:
    ...
        virtual Q_INVOKABLE void onFormXChanged(int value);
        virtual Q_INVOKABLE void onFormYChanged(int value);
        virtual Q_INVOKABLE void onFormWidthChanged(int value);
        virtual Q_INVOKABLE void onFormHeightChanged(int value);
    ...

main.cpp

...
WQtMainFormHelper mainFormHelper;
m_pQTEngine->rootContext()->setContextProperty("mfMainFormHelper", &mainFormHelper);
...

此解决方案效果很好,但是遭到老板的拒绝,因为他要求将所有这部分代码全部限制在c ++一侧编写。

所以我的问题是:如何实现与上述功能完全相同的功能,但是将所有代码编写在我的c ++类中,而qml端没有ANY

代码行?

在用Visual Studio 2019编写的Qt5项目中,我必须与c ++类中的几个qml属性进行非常密切的沟通。更确切地说,我需要能够更改x,y,宽度和高度...

c++ properties qt5 qtquick2 qtquickcontrols2
1个回答
0
投票

尝试用Q_PROPERTIES替换Q_SIGNAL和Q_INVOKABLE并实现所有插槽/信号。在UI中,对mainWindow的所有4个属性都使用属性绑定,例如“ x:mfMainFormHelper.x”。

© www.soinside.com 2019 - 2024. All rights reserved.