qml與c++交互炬守,不涉及傳參

注意事項:

  1. 新建的c++類必須是QObject的枕磁,我這邊的Qt在我新建完一個類的時候储笑,是不會自動導入頭文件的瞻讽,所以需要自己導入頭文件追迟。

進入正題

當我右鍵 -> 添加新文件 -> C++ class

qt新建QObject.png

需要交互脆荷,則c++必須是個槽函數(shù)

#include <QObject> //這里需要手動導入
class UA4Qml2 : public QObject // 這里必須是QObject的子類
{
    Q_OBJECT
public:
    UA4Qml2(QObject *parent = 0);

signals:

public slots:
    void loadUrl(); // 這里可以由qml進行調(diào)用
};

然后需要在入口函數(shù)加入以下代碼

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine *engine = new QQmlApplicationEngine();
    engine->rootContext()->setContextProperty("$SigDispatcher", new UA4Qml2); //這里請注意
    engine->load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

然后是qml蛋逾,正常調(diào)用

import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow {
    visible: true
    width: 640
    height: 480

    Button{
        id:loadUrl
        text: "測試加載url"
        onClicked: {
            // 這里就是調(diào)用的地方
            $SigDispatcher.loadUrl();
        }
    }
}

然后就可以正常響應(yīng)了

話外音

  1. 然后我們來看一下集晚,如果不加QObject 會報什么問題
class  UA4QML{
public :
    UA4QML();
};

然后在

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "ua4qml2.h"
#include "ua4qml.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine *engine = new QQmlApplicationEngine();
    //這里注意是調(diào)用的UA4Qml,而非上面的UA4Qml2
    //這里調(diào)用的不是QObject的子類
    engine->rootContext()->setContextProperty("$SigDispatcher", new UA4QML);
    engine->load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

查看報的錯誤

../testCurlPrj/main.cpp: In function ‘int main(int, char**)’:
../testCurlPrj/main.cpp:12:75: error: ‘QVariant::QVariant(void*)’ is private within this context
     engine->rootContext()->setContextProperty("$SigDispatcher", new UA4QML);
                                                                           ^
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qlocale.h:43:0,
                 from /usr/include/x86_64-linux-gnu/qt5/QtGui/qguiapplication.h:46,
                 from /usr/include/x86_64-linux-gnu/qt5/QtGui/QGuiApplication:1,
                 from ../testCurlPrj/main.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qvariant.h:471:12: note: declared private here
     inline QVariant(void *) Q_DECL_EQ_DELETE;
            ^~~~~~~~
../testCurlPrj/main.cpp:12:75: error: use of deleted function ‘QVariant::QVariant(void*)’
     engine->rootContext()->setContextProperty("$SigDispatcher", new UA4QML);
                                                                           ^
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qlocale.h:43:0,
                 from /usr/include/x86_64-linux-gnu/qt5/QtGui/qguiapplication.h:46,
                 from /usr/include/x86_64-linux-gnu/qt5/QtGui/QGuiApplication:1,
                 from ../testCurlPrj/main.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qvariant.h:471:12: note: declared here
     inline QVariant(void *) Q_DECL_EQ_DELETE;
            ^~~~~~~~

其實,我表示我看的時候区匣,特別的頭大偷拔。報錯說:‘QVariant::QVariant(void*)’ is private within this context 看的一頓暈眩。惡心亏钩。

  1. 如果我們不放到槽函數(shù)里面會怎樣

    #ifndef UA4QML2_H
    #define UA4QML2_H
    
    #include <QObject>
    class UA4Qml2 : public QObject
    {
        Q_OBJECT
    public:
        UA4Qml2(QObject *parent = 0);
    
        void loadUrl(); //這里不是槽函數(shù)
    signals:
    
    public slots:
    };
    
    #endif // UA4QML2_H
    

    查看報的錯誤:

    qrc:/main.qml:14: TypeError: Property 'loadUrl' of object UA4Qml2(0x564d6d5a3c40) is not a function
    

    看著這個錯誤莲绰,還是有點意思的,不是一個方法姑丑。

  2. 我們不加頭文件 #include <QObject>

    #ifndef UA4QML2_H
    #define UA4QML2_H
    
    //#include <QObject> //這里被我注釋掉了
    class UA4Qml2 : public QObject
    {
        Q_OBJECT
    public:
        UA4Qml2(QObject *parent = 0);
    
        void loadUrl();
    signals:
    
    public slots:
    };
    
    #endif // UA4QML2_H
    

    看下報的錯誤

    In file included from ../testCurlPrj/ua4qml2.cpp:1:0:
    ../testCurlPrj/ua4qml2.h:6:1: error: expected class-name before ‘{’ token
     {
     ^
    ../testCurlPrj/ua4qml2.h:7:5: error: ‘Q_OBJECT’ does not name a type
         Q_OBJECT
         ^~~~~~~~
    ../testCurlPrj/ua4qml2.h:12:1: error: ‘signals’ does not name a type
     signals:
     ^~~~~~~
    ../testCurlPrj/ua4qml2.cpp:4:17: error: expected constructor, destructor, or type conversion before ‘(’ token
     UA4Qml2::UA4Qml2(QObject *parent) : QObject(parent)
                     ^
    Makefile:480: recipe for target 'ua4qml2.o' failed
    

    額钉蒲,看到這樣的錯誤,也是一頓抽搐彻坛,不知所云顷啼。話說可能我是java轉(zhuǎn)過來的踏枣,所以看上去就不是特別的友好,說好的c++ 是最好的語言呢钙蒙?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茵瀑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子躬厌,更是在濱河造成了極大的恐慌马昨,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扛施,死亡現(xiàn)場離奇詭異鸿捧,居然都是意外死亡,警方通過查閱死者的電腦和手機疙渣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門匙奴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妄荔,你說我怎么就攤上這事泼菌。” “怎么了啦租?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵哗伯,是天一觀的道長。 經(jīng)常有香客問我篷角,道長焊刹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任恳蹲,我火速辦了婚禮虐块,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阱缓。我一直安慰自己非凌,他們只是感情好,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布荆针。 她就那樣靜靜地躺著敞嗡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪航背。 梳的紋絲不亂的頭發(fā)上喉悴,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音玖媚,去河邊找鬼箕肃。 笑死,一個胖子當著我的面吹牛今魔,可吹牛的內(nèi)容都是我干的勺像。 我是一名探鬼主播障贸,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吟宦!你這毒婦竟也來了篮洁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤殃姓,失蹤者是張志新(化名)和其女友劉穎袁波,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜗侈,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡篷牌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了踏幻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枷颊。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叫倍,靈堂內(nèi)的尸體忽然破棺而出偷卧,到底是詐尸還是另有隱情豺瘤,我是刑警寧澤吆倦,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站坐求,受9級特大地震影響蚕泽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桥嗤,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一须妻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泛领,春花似錦荒吏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锡宋,卻和暖如春儡湾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背执俩。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工徐钠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人役首。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓尝丐,卻偏偏與公主長得像显拜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子爹袁,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361