轉:QT實現陰影窗口(三)

上一篇講到了實現用拖動窗口,這篇分享一下實現最大化,最小化窗口。

     一般的窗口都有最大化最小化功能,在WINDOWS系統下,在窗口右上角有相應的按鈕,而在MAC系統,相應的按鈕是在左上角的。現在我們的窗口是沒有最小化最小化和關閉按鈕的,要關閉窗口只能用Alt + F4或Esc鍵。

     這裏實現一個最大化,最小化和關閉窗口按鈕的部件來代替標準窗口的窗口控制按鈕,實現如下:

//WindowControl.h

class WindowControl :
 public QWidget
{
public:
//......

 QPushButton* minButton;
 QPushButton* maxButton;
 QPushButton* closeButton;
 QHBoxLayout* layout;
 QWidget *buttonWidget;
};

 

//WindowControl.cpp

構造函數裏面

     layout->setContentsMargins(1, 0, 1, 2);
     layout->setSpacing(1);

     //控件背景
     buttonWidget = new QWidget(this);
     buttonWidget->setStyleSheet(WINDOW_CONTROL_STYLE.arg(":/Images/WindowControlBackground"));

    //最小化按鈕
     minButton = new QPushButton(this);
     minButton->setFocusPolicy(Qt::NoFocus);
     minButton->setText("");

    //爲了跟標準窗口一樣的效果,我爲這三個按鈕提示了不同狀態時的樣式。

     minButton->setStyleSheet(BUTTON_STYLE.arg(":/Images/WindowControlMinNormal").arg(":/Images/WindowControlMinHover").arg  (":/Images/WindowControlMinPressed"));
     //minButton->resize(15, 17);
     minButton->setMaximumSize(24, 17);

     //......其他按鈕類似
     layout->addWidget(minButton);
     layout->addWidget(maxButton);
     layout->addWidget(closeButton);
     buttonWidget->setLayout(layout);
     outLayout->addWidget(buttonWidget);

     然後在窗口類里加入

    WindowControl* winControl;
    重載大小改變事件,以使得窗口大小變化時,最大化等按鈕能顯示在正常的位置

    void GraphicDialog::resizeEvent(QResizeEvent *)
    {
       winControl->setGeometry(this->width() - 93 - 6 - 19 - 21, 19, 93, 19);
    }

    這裏可以看到右上角像標準窗口一樣的效果,但還沒有實現最大化和最小化等功能,還有窗口非常地難看,因爲窗口的大小大於背景圖的大小,被拉伸了,下篇將分享如何解決這個問題以及最大化最小化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章