簡體   English   中英

Q_INVOKABLE 在 QT 內的所有 getter 和 setter 函數上?

[英]Q_INVOKABLE on all getters and setters functions inside QT?

我的 class 中有一些字段。 我想在所有這些字段上都有Q_PROPERTY並且還有 getter 和 setter。

私有字段float pwm7Min的示例,我可以使用此代碼獲取我的 getter 和 setter 以及屬性。

Q_PROPERTY(float pwm7Min READ getPwm7Min WRITE setPwm7Min NOTIFY pwm7MinChanged)

這是由 QT 中的自動生成的。

在此處輸入圖像描述

問題:

但我想Q_INVOKABLE所有的 setter 和 getter。 有沒有辦法通過使用 QT Designer 在 QT 中做到這一點,還是我必須自己手動實現它們?

那是因為我遇到了這個錯誤,解決方案是Q_INVOKABLE 但是我的.cpp文件有超過 1000 行代碼,並且只包含 getter 和 setter。

 QMetaObject::invokeMethod: No such method IOcalibration::setInputCapture0Max(float)

它源於這個問題: QMetaObject::invokeMethod: No such method when using inheritance

如果您聲明Q_PROPERTY ,您可以通過 QML 中的屬性名稱訪問QML ,您不需要將任何 setter 或 getter 聲明為Q_INVOKABLE ,因為它已經在元 ZA8CFDE6331BD4B62669 系統中注冊的屬性。

如果你有

Q_PROPERTY(float pwm7Min READ getPwm7Min WRITE setPwm7Min NOTIFY pwm7MinChanged)

然后只需通過 qml 訪問

pwm7Min = 0.5

使用 setter/getter 是錯誤的,這就是 Qt Creator 不提供該選項的原因。

您只能使用QMetaObject::invokeMethod調用 Qt 元 object 系統已知的方法,即slot函數和Q_INVOKABLE函數。

將 getter 和 setter 注冊到moc的最簡單方法是在 header 文件中添加一個單獨的public scope 關鍵字slots

public slots:
    void setInputCapture0Max(float inputCapture0Max);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM