有一段时间我以为我无法在Qml应用程序中使用Qt c ++类,但我发现了这个:http://doc.qt.io/qt-5/qtqml-cppintegration-definetypes.html。
现在我正在尝试创建一个可实例化的对象类型。我第一次遇到“Qwidget:无法创建没有QApplication的Qwidget”在线阅读它答案似乎只是将QGuiApplication更改为QApplication,但后来我得到:“ASSERT:” !D-> isWidget“
这是我尝试用作qml类型的Qt类:http://doc.qt.io/qt-5/qlcdnumber.html。
这是我的main.cpp:
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QLCDNumber>
#include <QQuickStyle>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<QLCDNumber>("LCDNumber",1,0,"LCDNumber");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
以下是我在main.qml中创建的内容:
...
import LCDNumber 1.0
Window {
...
LCDNumber{
digitCount: 3
intValue: 1
mode: LCDNumber.Dec
segmentStyle: LCDNumber.Flat
smallDecimalPoint: false
value: 0
}
}
是否真的可以在qml中创建qt c ++类?我错过了什么?
答案 0 :(得分:2)
是的,这是可能的!
在你的类中使用标签Q_PROPERTY和Q_INVOKABLE来提供对属性和方法类的QML访问,如下所示:
<td><a href='agencies_admin_update.php?id=<?php echo $row['id']; ?>'>UPDATE</a></td>
你的main.cpp:
class NameYourClass : public QDeclarativeItem {
Q_OBJECT
Q_PROPERTY(int intProperty1 READ getIntProperty1 WRITE setIntProperty1)
Q_PROPERTY(QString strProperty2 READ getStrProperty2 WRITE setStrProperty2)
private:
int intProperty1;
QString strProperty2;
public:
explicit NameYourClass(QDeclarativeItem *parent = 0);
~NameYourClass();
Q_INVOKABLE int getIntProperty1() const;
Q_INVOKABLE void setIntProperty1(int value);
Q_INVOKABLE QString getStrProperty2() const;
Q_INVOKABLE void setStrProperty2(const QString &value);
}
您的QML文件:
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
qmlRegisterType<NameYourClass>("IdentifierName", 1, 0, "NameYourClass");
return app.exec();
}
我认为我没有忘记任何事情。
我希望它有所帮助!