在用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,宽度和高度...
尝试用Q_PROPERTIES替换Q_SIGNAL和Q_INVOKABLE并实现所有插槽/信号。在UI中,对mainWindow的所有4个属性都使用属性绑定,例如“ x:mfMainFormHelper.x”。