查看完整版本: [-- 请问注册类到QML的问题 --]

QTCN开发网 -> Qt QML开发 -> 请问注册类到QML的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

nyaruko 2017-04-27 19:22

请问注册类到QML的问题

我想在QML接收到类发送的信号
所以使用了qmlRegisterType

代码如下:
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    //注册类到QML
    qmlRegisterType<mTimer>("myTimer", 1,0, "MTimer");

    QQmlEngine engine;
    mTimer m_timer;
    engine.rootContext()->setContextProperty("m_timer", &m_timer);
    QQmlComponent component(&engine, QUrl(QStringLiteral("qrc:/main.qml")));

    component.create();
    return app.exec();
}

类的代码:
class mTimer : public QObject
{
    Q_OBJECT
public:
    explicit mTimer(QObject *parent = 0);
      
signals:
    void whenTimeChanged(const QString &timeStr);
public slots:
    void onStartBtnClicked();
    void onStopBtnClicked();
    void onTimerTimerOut();
}
QML
MTimer{
           onWhenTimeChanged: timeText.text = timeStr
   }
已经对照书和百度上的教程好多遍了,感觉没有错误
但是编译的时候要么就提示component is not ready 或者不提示这个错误,但是接收不到信号
请问是为什么?

never_forget 2017-04-28 08:32
为什么你注册的是类对象,但是却使用类本身呢?你是怎么做到的,你的 Qt  没有报错嘛?
我怀疑你买了本假书,上了一个假的百度~~~

component is not ready 这个就是说你的 QML 文件有问题,不能正确加载~~~

至于有时候不提示这个错误,可能 QML 编译环境不稳定造成的~~~

toby520 2017-04-28 09:36
main函数写错了 使用engine去load 因为你load的是主界面

nyaruko 2017-04-28 11:46
toby520:main函数写错了 使用engine去load 因为你load的是主界面 (2017-04-28 09:36) 

谢谢,试了一下才发现原来用了qmlRegisterType后就不需要再使用compoent了。。

nyaruko 2017-04-28 11:50
never_forget:为什么你注册的是类对象,但是却使用类本身呢?你是怎么做到的,你的 Qt  没有报错嘛?
我怀疑你买了本假书,上了一个假的百度~~~
component is not ready 这个就是说你的 QML 文件有问题,不能正确加载~~~
....... (2017-04-28 08:32) 

没有报错呀,qmlRegisterType和component不能同时存在么。。


查看完整版本: [-- 请问注册类到QML的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled