• 3860阅读
  • 4回复

[提问]请问注册类到QML的问题 [复制链接]

上一主题 下一主题
离线nyaruko
 

只看楼主 倒序阅读 楼主  发表于: 2017-04-27
我想在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

只看该作者 1楼 发表于: 2017-04-28
为什么你注册的是类对象,但是却使用类本身呢?你是怎么做到的,你的 Qt  没有报错嘛?
我怀疑你买了本假书,上了一个假的百度~~~

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

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

只看该作者 2楼 发表于: 2017-04-28
main函数写错了 使用engine去load 因为你load的是主界面
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线nyaruko

只看该作者 3楼 发表于: 2017-04-28
回 toby520 的帖子
toby520:main函数写错了 使用engine去load 因为你load的是主界面 (2017-04-28 09:36) 

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

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

没有报错呀,qmlRegisterType和component不能同时存在么。。
快速回复
限100 字节
 
上一个 下一个