1. 修改QDockWidget的背景顏色
通過樣式表為QDockWidget
添加背景顏色翎卓,直接添加background-color
的效果:
可以看到,QDockWidget
包括其內(nèi)部的子組件摆寄,都被修改了樣式失暴,因?yàn)槲覀儧]有指定background-color
添加的對象坯门,添加樣式對象:
QDockWidget {
background-color: rgb(255, 255, 255);
}
這樣QDockWidget
內(nèi)部的子組件不會被修改樣式,運(yùn)行后逗扒,我們發(fā)現(xiàn)田盈,當(dāng)此窗口懸停時(shí),背景變成了白色缴阎,而驮是疲靠主界面邊緣時(shí),設(shè)置的背景顏色沒有失效:
這個(gè)問題述暂,我們需要在樣式表中添加窗口停靠時(shí)的樣式QDockWidget > QWidget{ }
:
QDockWidget {
background-color: rgb(255, 255, 255);
}
QDockWidget > QWidget {
background-color: rgb(255, 255, 255);
}
2. 取消QDialog窗口的幫助(?)按鈕
當(dāng)我們創(chuàng)建一個(gè)QDialog
并顯示時(shí)建炫,我們會發(fā)現(xiàn)QDialog
會有個(gè)?
的幫助按鈕畦韭,通過setWindowFlags()
可以取消這個(gè)按鈕
//構(gòu)造函數(shù)
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
//setWindowFlags 設(shè)置只保留關(guān)閉按鈕
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); //Qt::Dialog不能省略
}
也可以直接使用new
的方式創(chuàng)建QDialog
,并指定窗口的WindowFlags
void MainWindow::on_pushButton_clicked()
{
QDialog *w = new QDialog(this, Qt::WindowCloseButtonHint);
w->exec();
}
若在此QDialog
中添加布局肛跌,程序運(yùn)行后艺配,會報(bào)錯(cuò)
QWindowsWindow::setGeometry: Unable to set geometry 120x30+737+410 (frame: 136x46+729+402) on QWidgetWindow/"QDialogClassWindow" on "\\.\DISPLAY1". Resulting geometry: 244x221+737+410 (frame: 260x237+729+402) margins: 8, 8, 8, 8 minimum size: 244x221 MINMAXINFO maxSize=0,0 maxpos=0,0 mintrack=260,237 maxtrack=0,0)
將WindowFlags
修改為
//Qt::CustomizeWindowHint即為固定QDialog的窗口大小
QDialog *w = new QDialog(this, Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint);
當(dāng)然,Qt提供了多種WindowFlags
用于設(shè)置窗口衍慎,具體可以參考文檔转唉。
3. 移除布局中添加的Widget
我們通常會使用addWidget()
將自定義的Widget添加到布局中,當(dāng)需要移除此Widget時(shí)稳捆,可以使用removeWidget()
//m_myLayout為QGridLayout類型的成員變量
//m_myWidget為繼承于QWidget的自定義Widget
//添加Widget
m_myLayout->addWidget(m_myWidget, 0, 0);
//移除Widget
m_myLayout->removeWidget(m_myWidget);
運(yùn)行程序后赠法,發(fā)現(xiàn)只使用removeWidget()
,自定義的Widget還是會保留在窗口中乔夯,如圖:
因?yàn)?code>addWidget()默認(rèn)將自定義的Widget的父節(jié)點(diǎn)設(shè)為當(dāng)前窗口砖织,所以我們需要將自定義的Widget的父節(jié)點(diǎn)設(shè)為空,就可以徹底移除
m_myLayout->removeWidget(m_myWidget);
m_myWidget->setParent(nullptr); //將父節(jié)點(diǎn)設(shè)為空