日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt自定义窗口,其绘制的窗口边框线显示不全

發布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt自定义窗口,其绘制的窗口边框线显示不全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

自定義窗口,該窗口包含標題欄,默認整個窗口的邊框線為藍色,當點擊該窗口的時候,窗口的邊框線便為紅色。程序在運行的時候,窗口的邊框線只顯示了左右兩邊的線,沒有顯示上下邊的線。

示例

效果:

解決方法

針對上面窗口只顯示左右兩邊,不顯示上下兩邊,在改變邊框線的寬度后線寬依舊沒有變化,考慮到是窗口的內容遮住了邊框線,于是在ui文件中重寫調整繪制邊框線的控件上面的窗口的大小,使繪制邊框線的窗口上的窗口小于繪制邊框線的窗口。這樣繪制的邊框線便不會被遮擋。
先看一下整個ui窗口的結構:

邊框線在子控件backwidget上繪制的,并設置整個窗口LayoutShowForm為柵格布局,布局的上下左右邊距均為0,這樣backWidget與LayoutShowForm一樣大小,在backWidget之上,進行垂直布局,將控件widget與titleWidget進行垂直布局,在titleWidget之中將namelabel進行了柵格布局,從而呈現上面所示的界面。
邊框線在backWidget上繪制的,由于backWidget與LayoutShowForm一樣大小,所以不能顯示完整的邊框線。這時需重新調整backWidget的柵格布局的上下左右邊距,使該邊距能正好顯示出所設置的線寬,這樣就能顯示正常的邊框線。下面是調整完backWidget的上下左右邊距后的ui。
ui窗口如下圖:

對應的ui的結構圖還是沒有變化,只是backWidget的柵格布局中設置了上下左右邊距。之前所有的柵格布局邊距都為0.
調整后的柵格布局的上下左右邊距:

接下來,上代碼,由于邊框線是在子控件上繪制的,而并非直接在窗口LayoutShowForm上繪制,這里不能直接使用重繪函數,而必須使用事件過濾,首先在子控件backWidget上安裝事件過濾:

ui->backWidget->installEventFilter(this);

接下來重寫事件過濾:

bool LayoutShowForm::eventFilter(QObject *watched, QEvent *event) {if (watched == ui->backWidget && event->type() == QEvent::Paint) {paintLayoutPreBoardLine(ui->backWidget);return true;}return false; }

在事件過濾函數中實現繪制邊框線:

void LayoutShowForm::paintLayoutPreBoardLine(QWidget *widget) {QPainter painter(widget);//backWidgetQPen pen;pen.setWidth(3);pen.setColor(m_colorBorad);painter.setPen(pen);painter.setRenderHint(QPainter::Antialiasing);painter.drawRect(QRect(0,0,244,165));m_isSetBoardColor = false;qDebug()<<QStringLiteral("重繪邊框色"); }

忘記一點當設置了backWidget的柵格布局的上下左右間距后,原本的垂直布局中的內容就會變小,讀者可以根據項目需要來調整各控件的大小。
以上便可以實現邊框線正常顯示。

總結

以上是生活随笔為你收集整理的qt自定义窗口,其绘制的窗口边框线显示不全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。