[無題] QT カスタムの閉じる、ズームイン、ズームアウト ボタンのタイトル バー

株式、ファンド、先物、外国為替などのデータのサイクル分析やトレンド分析に使用できるフーリエサイクル解析ソフトウェアを独自に開発。

1. 問題の原因

Qtプログラムのタイトルバーのカラースキンを変更したり、ヘッダー命令や認可命令を追加する必要があるためですが、QT付属のタイトルバーの色は変更できないようで、さらに新しいボタンのテキストを追加するのは難しいので、プログラムをカスタマイズします。以下に示すように。

 2. 導入手順

2.1 タイトルバーインターフェイスをカスタマイズする

2.2 システムに付属のタイトル バーを非表示にする

// ボーダーレス、カスタム閉じる、ズームイン、ズームアウト ボタンに設定します
this->setWindowFlags(Qt::FramelessWindowHint);

2.3 閉じる、最大化、最小化、ボタンの応答を実現

//顶部按钮响应
    connect(ui.pBClose, &QPushButton::clicked, [=]() {close(); }); 
    connect(ui.pBMaxWindow, &QPushButton::clicked, [=]() 
    { if (this->isMaximized()) 
    { 
        this->showNormal(); 
    } 
    else 
    { 
        this->showMaximized(); 
    } 
    }); 
    connect(ui.pBMinWindow, &QPushButton::clicked, [=]() {this->showMinimized(); });

2.4 タイトルバーを押したままウィンドウをドラッグして移動できるようにする

システムのタイトル バーには、マウスの左ボタンを押したままウィンドウをドラッグする効果が付いていますが、この機能もここでは割り引かれています。

マウスが押されると、マウスがタイトル バー上にあるかどうかが判断され、そうであれば、マウスの左ボタンが true に設定されます。マウス移動関数は、マウスが押されたかどうかを内部的に判断し、タイトル バーのリアルタイム位置を計算します。マウスと初期位置を比較するために、マウスの動きの相対変位を計算し、その相対変位をメイン ウィンドウの座標に加算し、メイン ウィンドウを移動して開始位置を更新します。マウスリリース関数では、左ボタンダウンのブール値を false に設定するだけです。

void FuliyePeriod::mousePressEvent(QMouseEvent *event) 
{ 
    //マウスの左ボタンのみが移動およびサイズ変更可能
    if (event->button() == Qt::LeftButton) 
    { 
        if (ui.widgetToolBar->underMouse()) 
        { 
            m_leftMousePressed = true; 
            //マウスの左ボタンが押されると、画面上のウィンドウの座標
            m_StartPoint =event->globalPos(); 
        } 
    } 
} 
void FuliyePeriod::mouseMoveEvent(QMouseEvent *event) 
{ 
    // window 
    if ( m_leftMousePressed) 
    { 
        QPoint curPoint =event->globalPos(); //押して位置を移動
        QPoint movePoint = curPoint - m_StartPoint;  
        //通常のウィンドウ
        QPoint mainWinPos = this->pos();
        this->move(mainWinPos.x() + movePoint.x(), mainWinPos.y() + movePoint.y()); 
        m_StartPoint = curPoint; 
 
    } 
} 
void FuliyePeriod::mouseReleaseEvent(QMouseEvent * イベント) 
{ 
    m_leftMousePressed = false;//释放鼠标
}

最後に、タイトルバーを長押ししてメインウィンドウをドラッグする機能が実現されましたが、システム境界をドラッグしてサイズを調整できるという別の問題がありますが、その実現方法については次のセクションで説明します。

おすすめ

転載: blog.csdn.net/baochunlei1/article/details/124533263