<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## invokeMethod - 如果調用的函數耗時較長,同步調用會造成主程序的堵塞。Qt中提供了一個便捷的函數`QMetaObject::invokeMethod` - 該函數就是嘗試調用obj的member函數,可以是信號、槽或者Q_INVOKABLE聲明的函 - QMetaObject::invokeMethod可以是異步調用,也可以是同步調用。這取決與它的連接方式`Qt::ConnectionType` **函數聲明** ``` static bool invokeMethod(QObject *obj, const char *member, Qt::ConnectionType, QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument(Q_NULLPTR), ... QGenericArgument val9 = QGenericArgument()); ``` **調用方式** ``` enum ConnectionType { // 則如果obj與調用者位于同一個線程中,則會同步調用該成員; 否則它將異步調用該成員 AutoConnection, // 則會立即調用該成員。(同步調用) DirectConnection, // 則會發送一個QEvent,并在應用程序進入主事件循環后立即調用該成員。(異步調用) QueuedConnection, // 則將以與Qt :: QueuedConnection相同的方式調用該方法,除了當前線程將阻塞直到事件被傳遞。使用此連接類型在同一線程中的對象之間進行通信將導致死鎖。(異步調用) BlockingQueuedConnection, UniqueConnection = 0x80 }; ``` ## 聲明為 Q_INVOKABLE ``` Q_INVOKABLE void setText(QString msg); ``` ## 異步調用注意 當函數的參數有自定義類型時,程序將會報錯,因為調用的類型必須是信號、槽,以及Qt元對象系統能識別的類型。可以使用Qt命名類型所提供的`qRegisterMetaType()`來注冊自定義類型 ``` //頭文件 #include <QMetaType> //自定義類型 struct AsynResults { int imgId; QImage image; int result; }; //在類構造時,注冊類型 qRegisterMetaType<AsynResults>("AsynResults"); //QMetaObject::invokeMethod調用 QMetaObject::invokeMethod(this, "reportImageResultAsync", Q_ARG(AsynResults, asynresults); ``` ## 實例 ``` bool result; //同步調用 QMetaObject::invokeMethod(obj, "func", Qt::DirectConnection, Q_RETURN_ARG(bool, result), Q_ARG(QString, "test"), Q_ARG(int, 100); //異步調用 QMetaObject::invokeMethod(obj, "func", Qt::QueuedConnection, Q_ARG(QString, "test"), Q_ARG(int, 100); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看