Qt 之 設定視窗邊框的圓角(使用QSS和PaintEvent兩種方法)

來源:互聯網
上載者:User

標籤:屬性   ring   半徑   右上方   bsp   pat   qwidget   注意   ber   

Qt在設定視窗邊框圓角時有兩種方式,一種是設定樣式,另一種是在paintEvent事件中繪製視窗。下面分別敘述用這兩種方式來實現視窗邊框圓角的效果。

一、使用setStyleSheet方法

this->setStyleSheet(“QWidget{border-top-left-radius:15px;border-top-right-radius:5px;}”)); 
使用的主要是使用border-radius 屬性,關於這個屬性,可選的樣式有 
border-top-left-radius 設定左上方圓角; 
border-top-right-radius 設定右上方圓角; 
border-bottom-left-radius 設定左下角圓角; 
border-bottom-right-radius 設定右下角圓角; 
border-radius 設定四個角圓角;

關於border-radius 後面的參數 
(1)一個參數 
border-radius:15px

(2)兩個參數 
border-radius: 15px 50px 
第一個參數設定X軸方向的半徑 
第二個參數設定Y軸方向的半徑 

可以看出設定一個參數代表X軸和Y軸設定了同樣的值,而兩個參數分別為X軸和Y軸方向的半徑。大家可以根據不同需要去設定參數。

二、在paintEvent事件中繪製視窗邊框

這裡我們需要重寫paintEvent方法,具體代碼如下:

void paintEvent(QPaintEvent *event){    QPainter painter(this);    painter.setRenderHint(QPainter::Antialiasing);  // 反鋸齒;    painter.setBrush(QBrush(Qt::red));    painter.setPen(Qt::transparent);    QRect rect = this->rect();    rect.setWidth(rect.width() - 1);    rect.setHeight(rect.height() - 1);    painter.drawRoundedRect(rect, 15, 15);    //也可用QPainterPath 繪製代替 painter.drawRoundedRect(rect, 15, 15);    {        QPainterPath painterPath;        painterPath.addRoundedRect(rect, 15, 15);        p.drawPath(painterPath);    }    QWidget::paintEvent(event);}
效果如下:

如果不寫painter.setRenderHint(QPainter::Antialiasing);則圓角會出現鋸齒,如。 
 
仔細對比可以看見圓角曲線有鋸齒狀。

注意:
(1)在使用這兩種方法的時候需要設定視窗的屬性。    this->setAttribute(Qt::WA_TranslucentBackground);//設定視窗背景透明    this->setWindowFlags(Qt::FramelessWindowHint);   //設定無邊框視窗(2)主表單載入不了樣式時需要在paintEvent事件中加上如下代碼。{    QStyleOption opt;    opt.init(this);    QPainter p(this);    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);    QWidget::paintEvent(event);}
設定按鈕的背景邊框

原始圖 

設定無邊框或者背景透明可以去掉白色方框 

給按鈕設定如下樣式即可。 
{} 
或者 
{border:none;}

 

http://blog.csdn.net/goforwardtostep/article/details/52084538

Qt 之 設定視窗邊框的圓角(使用QSS和PaintEvent兩種方法)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.