問題タブ [qquickwidget]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - QML ビューをネイティブ ウィンドウに埋め込む方法
QML ビューをネイティブ OSX ウィンドウに挿入しようとすると問題が発生します。それが可能であることは知っていますが、何が間違っているのかわかりません。
基本的に、私の目標は、ネイティブ NSView* を指定して、QML ベースのウィジェットを埋め込むことです。問題は、ビュー内でqmlを実際にレンダラーする場所を指すようにすることですが、横に余分な透明なウィンドウが作成され、QMLビューが適切に再描画されないようです。
これが私が使用しているコードです(すべてのメモリリークを無視してください):
簡単な qml は次のとおりです。
c++ - Qtターゲットをスレッドに移動できません
Qt 5.7 (Windows 10) アプリケーションで奇妙なバグに直面していますが、この種の動作の通常の犯人はどこにも見つかりません。
- 移動されるオブジェクトには親があります - ほとんどの場合そうではありません
- オブジェクトをプッシュする代わりにスレッドにプルしようとしています - これがエラーの原因ですが、どこから来ているのかわかりません
完全なエラー メッセージは次のとおりです。
QObject::moveToThread: 現在のスレッド (0x2afcca68) はオブジェクトのスレッド (0x34f4acc8) ではありません。ターゲット スレッドに移動できません (0x34f4adc8)
QObject::setParent: 親を設定できません。新しい親は別のスレッドにあります
ここにも私のコードがあります:
main.cpp
main ( main.qmlのエイリアス):
CustomQuickWidget.cpp
ご覧のとおり、ここでは典型的なワーカー スレッドの処理が行われています。ワーカー (ここでDeviceMapper
は ) に親がないことを確認しました。ウィジェット内でもインスタンス化されますが(QThread
も作成されます)、タイマーとともにスレッドに移動されます。
ここで、タイトルにある明らかな問題に加えて、次のことを言及する必要があります。
this->timer->moveToThread(this->deviceThread);
が呼び出されたときにそのようなエラーはありません- このまったく同じコードは、サブディレクトリ プロジェクトである別のプロジェクトでも問題なく動作します。1 つのサブプロジェクトは共有ライブラリ (このプロジェクトでも使用しています) を作成し、もう 1 つのサブプロジェクトはライブラリを使用するアプリケーションを作成します。
私の他のアプリケーションとこのアプリケーションの唯一の違いは、QQuickWidget
(の代わりにQWidget
) とを使用することQML
です。私はまったく初めてでQML
、これも初めてQQuickWidget
なので、「アクティブ化」する必要がある明らかな設定が欠落している可能性があります。
私も追加しました
直前にthis->deviceWorker->moveToThread(this->deviceThread);
、私は得ました
これは、 my オブジェクトがインスタンス化さmoveToThread(...)
れたスレッドと同じスレッドに属する前であることを意味します。QThread
の後にスレッド ID を出力してmoveToThread(...)
も同じ結果が返されますが、これはオブジェクトを他のスレッドに適切に移動できなかったために予想されるものです。
アップデート:
エラー メッセージは、リリース モードでビルドする場合にのみ表示されますが、ビルドの種類に関係なく、バグは依然として存在します。
c++ - QQuickWidget を使用して QtVirtualKeyboard を実行する
QtVirtualKeyboard の例を QQuickView ではなく QQuickWidget で動作させようとしています。QuickView には、次の main.cpp コードを使用します。これは私にとっては問題なく機能します。
main.cpp の次の実装で QQuickWidgets に変更すると、問題が発生します。
入力フィールドを押すと仮想キーボードが表示されますが、キーボードで入力を開始すると、入力方法プラグインに関連しているように見える「入力方法が設定されていません」というメッセージが表示されます。入力フィールドに文字が表示されません。何か案は?main.cpp の上記のバリアント間で QML コードは変更されませんでした。
ところで:私はLinux、gcc、Qt 5.9.0、EGLFSプラグインを使用しています
ご提案ありがとうございます。
よろしく、パトリック