1. 程式人生 > >Qt中自定義QDialog隱藏視窗的關閉按鈕

Qt中自定義QDialog隱藏視窗的關閉按鈕

今天在設計一個自定義Dialog的時候想要隱藏視窗的關閉按鈕,查了好久才找到解決的辦法

1. 這是一種比較極端的方法,直接建立一個無邊框的對話方塊,無邊框,自然什麼也沒了

QDialog dlg(this);
//建立一個無邊框的對話方塊
dlg.setWindowFlags(windowFlags()|Qt::FramelessWindowHint);
dlg.exec();
效果如圖

2. 保留標題,取消關閉按鈕
  - 原理解釋:自定義Dialog的視窗Flag是在父類QDialog的建構函式中進行初始化的,所以想要去掉按鈕可以通過向其父類建構函式傳參進行限定,但是如何完成這樣的操作呢?記不記得自定義Dialog時候的建構函式,在自定義視窗的建構函式中有的引數`QWidget *parent`,實際上是傳給`QDialog`建構函式的,因此此時可以進行傳參,下面給出的是我自定義的一個視窗的建構函式
RemindDialog::RemindDialog(QWidget *parent) :
    QDialog(parent,Qt::WindowTitleHint | Qt::CustomizeWindowHint),
    ui(new Ui::RemindDialog)
{
    ui->setupUi(this);
}
效果如圖

3. 進階

如果想要允許使用者自由改變自定義視窗的關閉按鈕顯示特性,只需要對建構函式介面稍加修改即可,如下

RemindDialog::RemindDialog(QWidget *parent, Qt::WindowFlags f) :
    QDialog(parent,f),
    ui(new Ui::RemindDialog)

注: 轉載請註明出處