私はQDockWidgetを継承するQtクラスを持っています。そのクラスには別のウィジェットが含まれています。 QDockWidget継承クラスで、含まれているウィジェットの上にものを描画する関数を定義する可能性はありますか?ペイントが含まれているウィジェットから独立しているが、継承クラスにリンクするように。 QDodckWidgetのドッキングウィジェットの上にペイント/ドロー
はありがとう
5
A
答えて
8
確かに可能です。実際には、それはかなり簡単です。あなたはあなたのQDockWidget
に他のすべての上に座っている子ウィジェットを配置する必要があります。それを行うには、あなたがドックウィジェットに追加する最後の子ウィジェットでなければなりません。そのウィジェットはバックグラウンドを描画してはならないし、ドックウィジェットの子を引き継ぐことができます。ウィジェットのサイズは、親ウィジェットのサイズを追跡する必要があります。
以下は、コンパイル可能な自己完結型の例です。
// https://github.com/KubaO/stackoverflown/tree/master/questions/overlay-line-11034838
#include <QtGui>
#if QT_VERSION > QT_VERSION_CHECK(5,0,0)
#include <QtWidgets>
#endif
class Line : public QWidget {
void paintEvent(QPaintEvent *) override {
QPainter p{this};
p.setRenderHint(QPainter::Antialiasing);
p.drawLine(rect().topLeft(), rect().bottomRight());
}
public:
using QWidget::QWidget;
};
class Window : public QWidget {
QHBoxLayout layout{this};
QLabel left{"Left", this};
QLabel right{"Right", this};
Line line{this};
void resizeEvent(QResizeEvent *) override {
line.setGeometry(rect());
}
public:
Window(QWidget * parent = nullptr) : QWidget{parent} {
left.setFrameStyle(QFrame::Box | QFrame::Raised);
layout.addWidget(&left);
right.setFrameStyle(QFrame::Box | QFrame::Raised);
layout.addWidget(&right);
}
};
int main(int argc, char *argv[])
{
QApplication app{argc, argv};
Window w;
w.show();
return app.exec();
}
0
私の知る限り:いいえ
ウィジェットは深さ順に描かれているので、彼らはその後すぐに間違いなく(更新されていない場合どのようなあなたのQDockWidget
派生クラス塗料、含まれるウィジェットによってオーバー描画されますペイントの更新は子ウィジェットに伝播されるため)。
関連する問題
- 1. サブビューの上にdrawRect
- 2. アグリゲーション上の表に
- 3. JPAの上にモデルフレームワーク
- 4. ボトムバーの上にフローティングアクションボタン
- 5. ナビゲーションバーの上にナビゲーションバー
- 6. jqueryクローンログインバーの上に
- 7. ビデオプレーヤーの上にオーバーレイコンテンツレイヤー
- 8. 分の上向きに取って、私のMac上で一台のマシン上で
- 9. ローカルホスト上のmysql workbench上のデータベースに接続するには?
- 10. 複数のモニタ上のすべてのウィンドウの上に描画
- 11. Jbooss上のJMS上のPOC
- 12. カスタムタイプのリストの上にFmap?
- 13. 別のキャンバスの上にファブリックキャンバス
- 14. イメージギャラリーの上にあるモーダル上の前後のボタン(スクロールする)?
- 15. 窓の右上の感嘆符 - 閉じるボタンの上に
- 16. Tkinterの他のキャンバスの上にキャンバスを持ち上げる
- 17. history.backの後に上にスクロール
- 18. NodeWebkitはフルスクリーンアプリケーションの上に「常に上に」ありますか?
- 19. Windows上のubuntu上のbash上の外部HDD
- 20. x64上でのコンパイルx64上のx32 JDK x64上のWindows
- 21. LAN上のリモートマシン上の共有リソースにアクセス
- 22. TextViewを直接XML上のImageviewの上に置く
- 23. ドメイン上にない家庭のマシン上の模擬FQDN
- 24. Xamarin.Forms上の画像の上にオーバーレイラベル、リスト、ボタンがあります
- 25. ホバー上のul要素の上にボックスシャドウを残す
- 26. apt-get install ubuntu14.04のドッカーの上にルビーを上書きする
- 27. レール上のボタン上にマウスを置いたときのポップオーバーコンテンツ
- 28. Googleシート上のクエリのようにExcel上でSQLを実行
- 29. 上記のalignParentBottomレイアウトの上にrecyclerviewを設定します。
- 30. ggplot2の積み上げ棒グラフの上にプロット線を作成
深さ順に描画することはあなたがそれらの上に置かれ、余分なウィジェットを使ってウィジェットの基礎となる上に描画することができます正確に何をしていること。それは簡単です:) IIRC Qt 4.1で導入された新しいウィジェットレンダリングモデルに小道具が移動します。 –
@KubaOberあなたは絶対に正しいですが、それはOPが尋ねたものではありません。 OPは、コンテナーウィジェットが子ウィジェットをペイントできるかどうかを尋ねました。答えは「いいえ」です。あなたの解決策は考えられる回避策ですが、含まれているウィジェットの上に 'QDockWidget'派生クラスペインティングを含まないので、OPの質問には答えません。 – cmannett85
これは解決策を提供します。コンテナウィジェットは自由に子ウィジェットを追加することができます。もちろん、ペイントコードはコンテナの 'paintEvent'には入っていませんが、誰がそれを気にしていますか? –