方式一:通過QBitMap設(shè)置控件有效繪制區(qū)域(缺點:容易產(chǎn)生鋸齒,鋸齒來自于QBitMap)
- Dialog繼承Qdialog
- 設(shè)置無邊框及背景透明
this->setWindowFlags(Qt::FramelessWindowHint); //去除標題邊框 this->setAttribute(Qt::WA_TranslucentBackground);//背景透明
- 重寫paintEvent
void Dialog::paintEvent(QPaintEvent *event) { //1. 繪制樣式(qss),例如qss中有背景色最后出來的dialog也是對應(yīng)背景顏色 QStyleOption opt; opt.initFrom(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//繪制樣式 //2. 設(shè)置掩碼,約定painter繪制區(qū)域 QBitmap bmp(this->size()); bmp.fill();//fill(const QColor &fillColor = Qt::white); QPainter painter(&bmp); //painter.setRenderHint(QPainter::Antialiasing, true);//解決繪圖有鋸齒,此方式針對掩碼的bitmap無效 painter.setPen(Qt::NoPen); painter.setBrush(Qt::black);//掩碼值 painter.drawRoundedRect(bmp.rect(), 36, 36);//在bitmap中繪制圓角矩形 setMask(bmp);//設(shè)置矩形掩碼以確定本控件可繪制區(qū)域 QDialog::paintEvent(event); }
參考鏈接:https://blog.csdn.net/ajcjldd/article/details/127306630
方式二:QPainter直接繪制圓角矩形(缺點:無法使用qss方式配置背景色,需要根據(jù)主題切換brush顏色)
-
同上
-
同上
-
重寫paintEvent
void Dialog::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 設(shè)置抗鋸齒,不然邊框會有明顯鋸齒 painter.setPen(Qt::NoPen); painter.setBrush(Qt::white); // 設(shè)置窗體顏色 QRect rect = this->rect(); painter.drawRoundedRect(rect, 36, 36); }
參考鏈接:https://zhuanlan.zhihu.com/p/513853572
方式三:QDialog中內(nèi)嵌QFrame,并使用qss設(shè)置QFrame對應(yīng)圓角(缺點:完美)
-
同上
-
同上
-
Dialog內(nèi)嵌QFrame,與Dialog同尺寸
void Dialog::setupUi() { this->setWindowModality(Qt::ApplicationModal); this->setFixedSize(QSize(WIDTH, HEIGHT)); this->setAttribute(Qt::WA_TranslucentBackground);//設(shè)置背景透明 this->setWindowFlags(Qt::FramelessWindowHint); //去除標題框 //back widget frame = new QFrame(this); frame->setObjectName("Frame"); frame->setFixedSize(this->size()); frame->setLayout(mainLayout); }
-
設(shè)置qss文章來源:http://www.zghlxwxcb.cn/news/detail-738106.html
QFrame#Frame{ background: #333333; border-radius: 16px 16px 16px 16px; }
參考鏈接:網(wǎng)上比較多,搜下文章來源地址http://www.zghlxwxcb.cn/news/detail-738106.html
到了這里,關(guān)于QDialog實現(xiàn)圓角對話框的三種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!