Qt工作笔记-设置窗体底纹以及控件透明度
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-设置窗体底纹以及控件透明度
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
?
原理
關鍵代碼
?
原理
在Web界面里面,可以看到,web前端程序員喜歡用一些淡淡的底紋(非背景),在此我也想實現(xiàn)下CS模型里面,Qt實現(xiàn)底紋功能!
程序運行截圖如下:
底紋是這樣的!
這里來展示一下動態(tài)圖:
?
這里的原理如下:
重寫這個painterEvent這個函數(shù),實時獲取窗體長和寬,并且是向上取整!然后再依次畫圖,是不是很簡單的思路:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;這里是說明一點:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;是在事件循環(huán)中的(估計最后調(diào)用了Windows消息機制(Windows端)),他可以手動觸發(fā),也可以被動觸發(fā)!
但在拖動窗體大小前:
void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;這個函數(shù)是會被提取觸發(fā)的!
?
下面說一下第二個知識點,如何設置控件的透明度!
這里有一個函數(shù)是setWindowOpacity(),這函數(shù)是設置窗體透明度,學Qt的都知道,控件都是窗體,理論上是有效果的,但設置這個并沒有什么用,因為Qt有個繼承樹機制,他的透明度由他父類決定,所以設置這個是然并卵!
但可以采用QSS進行設置,顏色有rgba,通過設置α通道即可:
background-color:rgba(255, 255, 255, 150)?
?
關鍵代碼
QSS
QTreeView{background-color:rgba(255, 255, 255, 150) }QPushButton{background-color:rgba(255, 255, 255, 150) }QLineEdit{background-color:rgba(255, 255, 255, 150) }關鍵的三個函數(shù):
void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; void setShadingNum(); void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; void MainWindow::setShadingNum() {m_shadingWidthNum = qCeil(width() / (float)QPixmap(":/img/shading.png").width());m_shadingHeightNum = qCeil(height() / (float)QPixmap(":/img/shading.png").height());} void MainWindow::resizeEvent(QResizeEvent *event) {setShadingNum();QMainWindow::resizeEvent(event); } void MainWindow::paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setBrush(QBrush(Qt::white));//set ShadingQPixmap pixmap(":/img/shading.png");int startDrawX = 0;int startDrawY = 0;painter.setPen(Qt::black);QRect rect = this->rect();rect.setWidth(rect.width() - 1);rect.setHeight(rect.height() - 1);painter.drawRoundedRect(rect, 30, 30);painter.setPen(Qt::red);painter.drawPixmap(rect.width() - LABLESIZE16, rect.height() - LABLESIZE16, QPixmap(":/img/dot_blue.png").scaled(LABLESIZE16, LABLESIZE16));for(int i = 0; i < m_shadingHeightNum; i++){for(int j = 0; j < m_shadingWidthNum; j++){painter.drawPixmap(startDrawX, startDrawY, pixmap);startDrawX += pixmap.width();}startDrawX = 0;startDrawY += pixmap.height();}QMainWindow::paintEvent(event); }?
總結
以上是生活随笔為你收集整理的Qt工作笔记-设置窗体底纹以及控件透明度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt工作笔记-时QLabel具有点击事件
- 下一篇: Qt + Python + OpenCV