問題タブ [qglwidget]
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 アイテムへの OpenGL レンダリング
QML アイテムのレイアウトを含む QML ファイルがあり、それらのアイテムの 1 つを QGLWidget にしたいと考えています。つまり、特定の QML アイテムにレンダリングしたいのです。
これを行う方法を知っている人はいますか?
multithreading - QGLWidget の paintGL() メソッドは、どの Qt スレッドから呼び出されましたか?
QGLWidget の paintGL() メソッドを使用して、OpenGL を使用してウィジェットに描画するとします。Qt が paintGL() メソッドを呼び出した後、自動的にバッファー スワップがトリガーされます。通常、OpenGL では、バックグラウンド バッファーへのフレームのレンダリングが完了するまで、このバッファー スワップによって呼び出し元のスレッドがブロックされますよね? どの Qt スレッドが paintGL とバッファ スワップを呼び出すのだろうか。それはメインの Qt UI スレッドですか? もしそうなら、それはバッファスワップ中のブロックがUI全体もブロックすることを意味しませんか? このプロセスに関する一般的な情報は見つかりませんでした..
ありがとう
c++ - QGLWidget が初期化後に resizeGL の呼び出しを受信しない
この(未回答の)質問で尋ねられたのと同じ問題のように見えるものがあります:Qt resizeGLの問題
大規模なアプリケーション用に新しいものをテストしてQGLWidget
います。このメソッドは、OpenGL ビューresizeGL
を変更して再描画するように配線されています。glViewport
私の QGLWidget はレイアウトの一部ではなく、次のように表示されるだけです。
私のコンピューターでは、これはデフォルトで 640x480 ウィンドウを作成し、resizeGL
初期化時に呼び出します。ウィンドウのサイズを変更するたびに、resizeGL
呼び出されることはありません。
これを修正しようとして、のみを含む別のQWidget
ものを作成しようとしました。これにより非常に小さなウィンドウが作成されたので、とforを修正しましたが、呼び出しには影響しませんでした。この時点で、どのように進めればよいか正確にはわかりません。QVBoxLayout
CustomWidget
sizeHint
sizePolicy
CustomWidget
resizeGL
qt - Qt-1つの3DシーンにQGraphicsViewを含む複数のレイヤー(QGLWidget)
私は現在、複数の2Dレイヤーをレンダリングできるナビゲート可能な3Dシーンを実装する可能性を評価しています。もう少し正確に言うと、3D環境で複数のグラフを表示して、それらのグラフ間の類似点と相違点を特定したいと思います。次のスクリーンショットを考慮すると、2つのグラフ(1つは黒、もう1つは灰色)があります。これらは同等です。グラフが異なると、逸脱したノードが赤で強調表示される場合があります。
私はQtのGraphicViewFrameworkQGraphicsScene
を使用しておりQGraphicsItem
、このプロジェクトとは別に、とを使用して編集可能なグラフエディターを確立しました。
QtはOpenGLサポートを提供します。たとえば、QGLWidget
提供された例を見てみました。私はOpenGLを使ったことがないので(Java3Dを使って作業したこともあります)、経験を共有できる人がいたらいいのにと思います。
いくつかの解決策が思い浮かびました。
- すべて
QGraphicsView
をaQPixmap
にレンダリングし、3Dで表示します。これにより、グラフはナビゲート可能になりますが、要素の選択などは禁止されます。 - すべての2Dグラフ要素に対して同等の3D要素を作成し、すべて
QGraphicsView
を3D表現に「変換」します。これはかなりの作業になると思います(特に、OpenGLを使用したことがないため) - たぶん、多くの適応なしでs
QGraphicScene
、ビュー、またはsだけを「配置」し、それでも通常の「mouseclickevents」などを登録する簡単な方法があります。QGraphicsItem
QGLWidget
最初の実装では、異なるレイヤーに複数のグラフを表示する、単純なナビゲート可能な「ビューアー」で十分です。ただし、将来的にピッキングなどを追加するために、拡張可能にしておく必要があります。
qt - QGLWidgetを全画面で表示するにはどうすればよいですか?
アプリケーションのUIの一部としてQGLWidgetを使用しています。それは中心的なウィジェットではありません、その周りには他にもたくさんのウィジェットがあります。ユーザーがボタンをクリックしたときに全画面表示したい。YouTubeビデオフラッシュプレーヤーのような同様の機能。
showFullScreenを効果なしで使用しようとしました。
私はhow-to-fullscreen-a-qglwidgetとfullscreen -widgetを読みましたが、showFullScreenの使用を提案しています。
Qtのドキュメントには、showFullScreenウィジェットを使用するには独立したウィンドウが必要であると記載されています。だから私はこれにはいくつかのトリックがあるはずだと思います。
c++ - swapBuffers() のスレッド ブロックからの Qt QGLWidget OpenGL レンダリング
メインスレッドとは異なるスレッドから QGLWidget に OpenGL をレンダリングする際に奇妙な問題があります。
別のスレッドからレンダリングを行うことは「完全に可能」であるという Qt 開発者からの公式声明が多数あります。私は次の説明に従いました:
http://doc.qt.nokia.com/qq/qq06-glimpsing.html#writingmultithreadedglapplications
ほぼ同じ方法で実装しました。唯一の違いは、異なる GLWidget で QWorkspace を使用せず、代わりに GLWidget を中央ウィジェットとして使用して MainWindow を作成することです。
アプリケーションを起動すると、レンダリング スレッドがランダムな位置にある三角形のフレームのレンダリングを開始します。しばらくすると (2 秒、場合によっては 10 秒)、スレッドは swapBuffers() 呼び出しで非常に長い時間ブロックし始めます。数秒後に swapBuffers() が自然に戻ることがあります。マウス ポインターをウィジェットまたはメイン ウィンドウの上に移動すると、swapBuffers はすぐに戻り、マウス ポインターを移動している限り、swapBuffers() はブロックされません。マウスをウィジェットの外に移動した後、またはマウスの移動を停止した後、レンダリングが数秒間続行され、swapBuffers が再びブロックを開始します。
この動作については、まったく説明がありません。フレームが完了するまで swapBuffers() が定期的にブロックされることを認識しており、vsync の待機も OpenGL バッファー スワップ呼び出し中に発生する可能性があることは明らかです。しかし、それは数ミリ秒で発生し、数秒間ブロックすることはありません。環境はX11 with GLXです。
wtfがここで起こっているという考えを持っている人はいますか? 問題が何であるかを見つける方法さえわかりません..
上記でリンクしたドキュメントで説明されているように、別のスレッドからレンダリングを実装しようとした人はいますか?
python - QWidgetshowFullScreenは複数のresizeEventsを生成します
PySideを使用してPythonで記述されたQTアプリケーションがあり、QGLWidgetのshowFullScreenメソッドに関する小さな問題に遭遇しました(ただし、他のすべてのウィジェットでも問題が発生します)。
問題は、プログラムがshowFullScreenから戻った後、ウィジェットの「最終的な」解像度がないことです。スイッチは、5〜10ミリ秒後に非同期でトリガーされるようです。
ウィジェットが表示された後、ウィジェットのサイズに応じてレイアウト計算を行う必要があるため、これは私にとって問題です。
以下は、QGLWidgetをサブクラス化する小さな再現機能です。この再現機能を使用すると、showFullScreenの後にresizeEventが2回呼び出されることに注意してください。
ウィジェットが実際にフルスクリーンモードになっているときに、どのresizeEventが「最終的な」ものであるかを知るための便利な方法、または知る方法を探しています。接続できる信号はありますか?
これについて助けてくれてありがとう。
c++ - Qtを使用して開発されたメディアプレーヤーでフルスクリーンを切り替えます
現在、Qtを使用してメディアプレーヤーを開発しています。必要な一般的な機能の1つは、全画面を切り替えることができることです。
レンダリングキャンバスは基本的にQGLWidgetです(私はそれからサブクラス化しています)。このメディアプレーヤーのメインウィンドウであるアプリケーションウィンドウに追加されます。レンダリングキャンバスに加えて、アプリケーションウィンドウには、ツールバー、ステータスバー、その他の小さなウィジェットがあります。私が実装したいフルスクリーンは、他のウィジェットが表示されないようにレンダリングキャンバスがフルスクリーンを占めるようにすることです。その間、キーを押すことでイベントをトリガーできます。
レンダリングキャンバスの親を0にリセットし、showFullScreen()関数を呼び出してみました。そして、アプリケーションウィンドウでhide()を呼び出しました。これにより、キャンバスが予想どおりに画面全体を占めるようになります。ただし、アプリケーションはキー押下イベントを取得していません。その結果、私は正常に戻ることができません。さらに、キャンバスの背景が黒と白の間で点滅しています(デフォルトの背景は白です)。
とにかく、私が試した方法がこれを実装するための最良の方法だとは思いません。通常に戻すと、複雑な親の変更が行われるためです。また、piexl値の表示(ソースはraw)など、フルスクリーンで実行する必要のあるタスクがいくつかあるため、アプリケーション全体の管理が困難になります。
フルスクリーンの切り替えを実装するためのより良い方法を誰かが提案できますか?
opengl - glDrawPixelsをスケーリングする方法は?
glDrawPixels画像の結果を拡大縮小する必要があります。
QtQGLWidgetでglDrawPixelsを使用して640x480ピクセルの画像バッファーを描画しています。
PaintGLで次のことを実行しようとしました。
しかし、それは機能しません。
ウィジェットのサイズを次のようにOpenGLビューポートとglOrthoに設定しています。