問題タブ [qt-mfc-migration]

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.

0 投票する
1 に答える
1861 参照

c++ - Qt タブ ウィジェットの MFC コントロール

Qt/MFC 移行フレームワークを使用しているプロジェクトに取り組んでおり、Qt ダイアログ内で既存の MFC コントロールを再利用しようとしています。

QTabWidget 内に MFC コントロール (CDialog または CWnd) を挿入できるかどうかは誰にもわかりません。現在、逆のことを行っています。MFC タブ (CDialog) と Qt タブ ( QWinWidget )が混在するタブ コントロールを持つ MFC ダイアログがあります。ただし、QWinWidget コントロールが適切に描画されておらず、フォーカスやキーボード入力を正しく受け取っていないため、このアプローチは頭を悩ませています。QTabWidget で Qt ダイアログを使用すると、このアプローチよりもうまく機能することを願っています。

0 投票する
4 に答える
2112 参照

c++ - MFCダイアログ内のQWinWidgetがタブ/矢印キーに再描画または応答しない

MFC ダイアログ内でQWinWidgetを使用していますが、QWinWidget 自体が正しく描画されておらず、キーボード入力を正しく処理していません。

塗り直し【未解決】

QWinWidget 内に QTableWidget があります。QTableWidget をスクロールすると、スクロールを停止するまで再描画されず、その時点ですべてが再描画されます。同様に、QTableWidget のセルに入力できます。コントロールは、上下にスクロールして強制的に再更新するまで更新されません (スクロールが停止すると再更新されます)。

この QWinWidget は MFC CDialog に格納されているため、CDialog の OnPaint メソッドをオーバーライドして QWinWidget::repaint メソッドのみを呼び出してみましたが、これには逆の問題があり、QWinWidget のみが更新され、CDialog が再描画されず、アーティファクトが発生します。 . QWinWidget::repaint と CDialog::OnPaint を呼び出すと、OnPaint メソッドをオーバーライドしないのと同じ結果になります。誰かがこの問題を見たことがありますか、それを解決する方法を知っていますか?

キーボード入力 [解決済み]

QWinWidget 内のどのコントロールも、タブ キーまたは矢印キーに正しく応答しません。タブ/矢印キーは、QWinWidget 全体 (およびすべての子コントロール) を単純にスキップします。QWinWidget 内をクリックしてコントロールを選択しても、次に Tab キーを押すと、QWinWidget 全体からフォーカスが完全にスキップされます。

QWinWidget には QWinWidget::focusNextPrevChild と QWinWidget::focusInEvent の 2 つの関数があり、どちらにも「\reimp」というコメント ヘッダーがあることに気付きました。正しいタブ機能を得るために、これらの関数をオーバーライドする必要がありますか? もしそうなら、正しいタブ機能のためにこれらの機能をどのように実装できますか。

0 投票する
0 に答える
1141 参照

qt - QWinWidget が埋め込まれた Mfc ダイアログのサイズ変更

Qt センター フォーラムで質問しましたが、まだ回答がありません。
誰かがこれについて何か知っていることを願っています。

QWinWidget を含む Mfc ダイアログがあります。ダイアログのサイズを変更すると、QWinWidget のサイズも自動的に変更され、位置も変更されます。これは、mfc ダイアログ内で QWinWidget を作成するコードです。

MyFrame は QFrame オブジェクトから派生しています。QFrame オブジェクトは Qt デザイナーで作成されます。QFrame にはレイアウトが割り当てられており、QFrame 子ウィジェットの幾何学的管理を行うことを想定しています。

ダイアログのサイズ変更境界線をドラッグすると実行されるコードは次のとおりです。

ダイアログのサイズが変更されたときに、フレーム オブジェクトのサイズ変更メソッドを OnSize から呼び出しています。フレームのサイズを変更した後、サイズのヒントとサイズ ポリシーに従って、子ウィジェットのサイズと位置を変更する必要があると予想していました。しかし、これは起こっていません。少なくとも、そうあるべきではありません。私が間違っていることは何ですか?

0 投票する
1 に答える
865 参照

qt - Qtダイアログを開いてMfcアプリケーションを最小化する

QtWinMigrate ソリューションを使用して、サード パーティの Mfc アプリケーションに読み込まれたプラグイン dll からダイアログを表示しています。問題は次のとおりです。

Mfc アプリケーションのメイン ウィンドウを最小化し、再度元に戻すと、開いている Qt ダイアログがすべて失われます。実際に Qt ダイアログが破棄されていることがわかりました。つまり、デストラクタが呼び出されています。

デバッグを行ったところ、次のことがわかりました。

Mfc メイン ウィンドウを閉じると、Qt ダイアログに SW_PARENTCLOSING wparam パラメータを含む WM_SHOWWINDOW メッセージが表示されます。次に、QtWndProc が呼び出され、SW_PARENTCLOSING ケースの問題に対して QHideEvent が送信されます。

ファイル qapplication_win.cpp の QtWndProc() 関数内 2160 行目

QWinWidget の eventFilter は、私のダイアログを削除する DefferedDelete を送信します。

QWinWidget.cpp の 280 行目

}

誰かが私にこの振る舞いを説明してもらえますか? これは私にはバグのようです。

ありがとう

0 投票する
1 に答える
526 参照

qt - QWinWidget の削除

mfc から Qt への移行を使用しており、Mfc アプリで Qt ダイアログを表示しています。winEvent ハンドラで QWinWidget を削除してもよろしいですか? 問題は、メインの mfc ウィンドウが閉じられたときに、My Mfc アプリケーションで開いているすべての Qt ダイアログを自動的に削除したいということです。WM_DESTROY はすべての子ウィンドウ (および Qt ウィジェットも) に対して送信されるため、 QwinWidget winEvent ハンドラーに次のコードを追加しました。

誰かこれにコメントしてくれませんか ありがとう

0 投票する
1 に答える
2021 参照

winapi - DllMain と Qt Mfc の移行

Mfc プラグインを Qt に移行するために、Mfc から Qt への移行ソリューションを使用しています。私の Mfc プラグインは、サード パーティの Mfc アプリに読み込まれます。基本的に、次のQt ベースのアプリケーション拡張の例を使用しています。

pluginInstance 関数のコードを読んで、Qt ソースを int すると、pluginInstance が内部で LoadLibrary と SetWindowsHook を呼び出していることに気付きました。

これまでのところ、すべてが正常に機能しています。しかし、次の懸念があります。DllMain から SetWindowsHook のように、user32.dll から LoadLibrary と関数を呼び出すことは禁止されています。DllMainのmsdn docでそれを読みました。では、これが安全でない場合、公式 Qt サイトが DllMain で pluginInstance を呼び出すように言っているのはなぜですか? Qtベースのアプリケーション拡張機能

0 投票する
2 に答える
510 参照

qt - QWinWidget の位置は常に 0 (ゼロ)

私は CView で QWinWidget をホストし、サイズ変更時に指定された位置に留まりたいと考えています。しかし、QWinWidget は常に (0, 0)、つまり CView の左上隅に移動します。

私はこの方法でデバッグしようとしました:

注意: pos は常に (0, 0) です。

何故ですか?

0 投票する
1 に答える
2194 参照

qt - Qt オブジェクトを Win32 DC (デバイス コンテキスト) に直接描画できますか?

Qt オブジェクトを QImage に描画し、そのイメージを HDC または CDC に描画できます。これにより、アプリケーションのパフォーマンスが低下する可能性があります。Qt オブジェクトを Win32 HDC または MFC CDC に直接描画できれば素晴らしいと思います。クリア用の QWin32Image などのクラスがあると思いますが、次のように使用できます。

私の考えでは可能ですか?または、それを行うより良い方法はありますか?

0 投票する
0 に答える
256 参照

qt - MFCアプリケーションでQGraphicsTextItemを印刷する方法

MFCアプリケーションでQGraphicsTextItemを使用してテキストを編集し、結果をビットマップに変換してビュー(画面)に表示しました。ただし、印刷時に問題があります。たとえば、PDFファイルに印刷する場合、テキストはビットマップであり、ファイルサイズも大きいため、スケーラブルではありません。

MFC印刷フレームワークでQGraphicsTextItemを印刷するにはどうすればよいですか?理想的な解決策は、QPrinterをMFC印刷フレームワークに接続するか、Win32DCでQPrinterを初期化することです。MFC印刷フレームワークは私のためにプリンターとDCを準備してくれたので、そのタスクを再度実行するためにQPrintDialogは必要ありません。コードは次のようになります。

それは可能ですか?自分のQPrinterを再実装する必要がありますか?QPrinterのソースコードをスキャンすると、非常に複雑であることがわかりました。私の目標を達成する簡単な方法があることを願っています。独自のQPrinterを実装する必要がある場合、何に注意する必要がありますか?誰かアドバイスをいただけますか?

0 投票する
1 に答える
1009 参照

c++ - MFCアプリケーションでモーダルQProgressDialogを表示できません

MFCアプリケーションからQtアプリケーションを起動しているときに、モーダルQtダイアログを表示するのに問題があります。具体的には、親をQWinWidgetインスタンスに設定すると、QProgressDialogインスタンスがMFCアプリケーション内に表示されません。これが私の問題です...

私のMFCアプリケーションは、DLLであるQtアプリケーションに大量のデータを転送する必要があります。QtアプリケーションのAPIには、QProgressDialogを使用して舞台裏で実装されるProgressDlgクラスが含まれています。このダイアログは、MFCアプリケーションが進行状況を更新できるように、Qtアプリケーションのイベントループを初期化する前に作成および更新する必要があります(QApplication :: exec()ヘルプには、モーダルウィジェットでこれが可能であると記載されています)。

基になるQProgressDialogの親を設定しなくても、進行状況バーは期待どおりに更新され、転送中もダイアログは応答し続けますが、MFCアプリケーションとの対話を続けることができます。

そこで、Qt / MFC移行フレームワークをインストールし、QProgressDialogの親をQWinWidgetに設定してみました。

(ここで、m_implはQProgressDialogから派生します。)

次に、MFC側に呼び出しコードを追加して、ダイアログを作成します。

ただし、親を設定する際に、QProgressDialogは表示されなくなります。(シナリオをさらに複雑にするために、:: FindWindowを使用してウィンドウ名を渡してハンドルを取得しました。私のMFCアプリケーションは、実際にはサードパーティの実行可能ファイルへのプラグインDLLです。)

すべての助けに感謝します。ありがとう。