Qt ウィジェットとウィンドウ設定

1. ボタンのプロパティ

(一)Qt::WA_TransparentForMouseEvents

「空から物を奪い、山から牛を叩く」効果に似たネズミの貫通機能を実現。

//qwidget.h
void setAttribute(Qt::WidgetAttribute, bool on = true);

このプロパティを有効にすると、ウィジェットとその子へのマウス イベントの配信が無効になります。マウス イベントは、ウィジェットとその子がウィジェット階層に存在していないかのように他のウィジェットに渡され、マウス クリックやその他のイベントは効果的にウィジェットを「通過」します。このプロパティはデフォルトでは無効になっています。

1. 使用方法

theButton->setAttribute(Qt::WA_TransparentForMouseEvents, true);

現在のウィンドウの透明領域はマウス イベントに応答しません。

setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
setAttribute(Qt::WA_TranslucentBackground, true);

現在のウィンドウが不透明だがマウスの侵入を実現する必要がある場合は、コードのシーケンスに注意してください。

// 一定要先设置鼠标穿透,否则无法穿透
setAttribute(Qt::WA_TransparentForMouseEvents, true);
 
setWindowFlag(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground, true);

その他のアプリケーション シナリオの例:
1. マウス クリック イベントに応答することは禁止されていますが、コード レベルで信号に応答する必要があります
2. 必要に応じて、コントロールの使いやすさの設定と比較して、プロパティの設定はより微妙です。
3. 一部の透明なフォーム (または Shaped インターフェイス) では、このウィンドウ インターフェイスの背後でマウスがウィンドウを操作できるようになります。

この記事の利点は、Qt 開発学習教材パッケージ、技術ビデオ (C++ 言語基礎、Qt プログラミング入門、QT シグナルおよびスロット メカニズム、QT インターフェイス開発イメージ描画、QT ネットワーク、QT データベース プログラミング、QTプロジェクトコンバット、QSS、OpenCV、クイックモジュール、インタビューの質問など) ↓↓↓↓下記を参照↓↓記事下部をクリックして料金を受け取ります↓↓ 

2. 例

 //按钮上显示的文字
QLabel * label = new QLabel;
label->setParent(this);
label->setFixedSize(menuBtn->width(),menuBtn->height());
label->setText(QString::number(i+1));
label->move(25 + (i%4)*70 , 130+ (i/4)*70);

//设置label上的文字对齐方式 水平居中 和垂直居中
label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

 //鼠标事件穿透
label->setAttribute(Qt::WA_TransparentForMouseEvents,true);

 

2、ウィンドウのプロパティ

(一)Qt::WA_DeleteOnClose

1 はじめに

ユーザーがメイン ウィンドウを閉じると、デフォルトの動作ではメイン ウィンドウが非表示になるため、メイン ウィンドウはメモリ内に残ります。メイン ウィンドウの数が多い場合、特定の問題が発生することがあります。

解決策は、コンストラクターで Qt::WA_DeleteOnClose のプロパティを設定することです。

setAttribute(Qt::WA_DeleteOnClose);

したがって、プログラム内で new を使用してウィンドウを作成すると、そのウィンドウに Qt::WA_DeleteOnClose プロパティを設定できます。このようにして、Qt はウィンドウが閉じられたときにウィンドウが占有していたリソースを自動的に再利用できるため、無効なリソースを時間内に再利用できるため、メモリ領域の節約に役立ちます。

2. Qt::WA_DeleteOnCloseによるワイルドポインタ問題について

setAttribute(QT::WA_DeleteOnClose,true) が設定されている場合、破棄シグナルがトリガーされます。これは手動で nullptr に設定できます。

if(dialog==null)
{
  dialog=new Dialog()
  //注意,如果使用了setAttribute(QT::WA_DeleteOnClose,true);则不能再将其加入到对象树,即不能通过父类this去创建,否则会调用析构函数释放该资源,
  //而setAttribute(QT::WA_DeleteOnClose,true);后,窗口在销毁时也会释放自身资源,导致异常!
  dialog->setAttribute(QT::WA_DeleteOnClose,true);
  connect(dialog, &Dialog::destroyed, this, [=](){
    dialog= nullptr;
    });
}
dialog.show(),

(2) Qtウィジェット&ウィンドウ設定

1 はじめに

まず、変数bool MouseTrackingが導入され、ウィジェットがマウスを追跡するかどうかを示す値が格納されます。その値はsetMouseTracking()関数を通じて設定でき、その値はhasMouseTracking()関数を通じて取得できます。

  • setMouseTracking(true) : マウス トラッキングが有効になります。マウス ボタンが押されていない場合でも、ウィジェットはマウス移動イベントを受け取りますMouseMoveEvent(QMouseEvent *event) は、マウスが移動するたびにトリガーされます
  • setMouseTracking(false) : マウス トラッキングは無効になっており、ウィジェットはマウス ボタンが押されたときにマウス移動イベントも受け取る必要があり、その後、mouseMoveEvent(QMouseEvent *event)がトリガーされます

2. 使用例

// 初始配置
setWindowFlags(Qt::WindowCloseButtonHint);//Qt.WindowCloseButtonHint    窗口只有一个关闭按钮
setFixedSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setMouseTracking(true);//这里
setWindowTitle(QString("欧陆战争"));
setWindowIcon(QPixmap(MAIN_SCENE_ICON_PATH));

(三)w->setFixedSize(w->width(),w->height());

w->show() の前に w->setFixedSize(w->width(),w->height()) を呼び出すことと、w->show() の後に呼び出すことの違い

  • w->show() の前に w->setFixedSize(w->width(),w->height()) が呼び出された場合、この時点で取得される w->width() と w->height() はデフォルト値。
  • ただし、w->show() の後に w->setFixedSize(w->width(),w->height()) が呼び出された場合、この時点で取得される w->width() と w->height() は次のようになります。ウィジェット 子コントロールのサイズに応じて、適切な値が自動的に調整されます。

1.

w->setFixedSize(w->width(),w->height());

w->show();

現象は次のとおりです。

 

2.

w->show();

w->setFixedSize(w->width(),w->height());

現象は次のとおりです。

 

ブログガーデン(ImreW): Qtウィジェット&ウィンドウ設定 - ImreW - Blog Gardenから記事を移行しました。

この記事の利点は、Qt 開発学習教材パッケージ、技術ビデオ (C++ 言語基礎、Qt プログラミング入門、QT シグナルおよびスロット メカニズム、QT インターフェイス開発イメージ描画、QT ネットワーク、QT データベース プログラミング、QTプロジェクトコンバット、QSS、OpenCV、クイックモジュール、インタビューの質問など) ↓↓↓↓下記を参照↓↓記事下部をクリックして料金を受け取ります↓↓ 

おすすめ

転載: blog.csdn.net/QtCompany/article/details/132173888