这种方法通过创建一个QPainterPath对象来定义圆角路径,然后将其转换为QRegion并设置为窗口的遮罩。 cpp #include <QPainterPath> #include <QRegion> QPainterPath path; path.addRoundedRect(this->rect(), 15, 15); // 创建一个圆角矩形路径 QRegion region(path.toFillPolygon().toPolygon(...
9 int min = qMin(this->rect().width(), this->rect().height()); 10 int radius = min / 2; 11 //画圆角矩形 12 QPainterPath path; 13 QRect rect = this->rect(); 14 path.moveTo(rect.bottomRight() - QPointF(0, radius)); 15 path.lineTo(rect.topRight() + QPointF(0, radius...
在Qt项目中,绘制只有两个圆角的矩形,可以使用QPainterPath合并addRoundedRect和addRect的path形成目标path,再使用painter填充绘制此path即可。 其具体的实现代码如下: void ShapeWidget::paintEvent(QPaintEvent *) { QPainter painter(this); QString text = "欢迎关注 @武三郎 ,一起学习,共同进步!"; int text_...
一、使用setStyleSheet方法 this->setStyleSheet(“QWidget{background-color:gray;border-top-left-radius:15px;border-top-right-radius:5px;}”)); 使用的主要是使用border-radius 属性,关于这个属性,可选的样式有 border-top-left-radius设置左上角圆角; border-top-right-radius设置右上角圆角; border-bottom-...
painterPath.addRoundedRect(rect, 15, 15); p.drawPath(painterPath); } QWidget::paintEvent(event); } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 效果如下: 如果不写painter.setRenderHint(QPainter::Antialiasing);则圆角会出现锯齿,如下图。
抗锯齿后的界面: 代码如下:QPixmap pixmap_; void MainWindow::paintEvent(QPaintEvent*){QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); // 抗锯齿;painter.setBrush(QBrush(QColor::fromRgb(136, 221, 185)));// Qt::blue));painter.setPen(Qt::transparent);QRect rect = this...
Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口。下面分别叙述用这两种方式来实现窗口边框圆角的效果。 一、使用setStyleSheet方法 this->setStyleSheet(“QWidget{border-top-left-radius:15px;border-top-right-radius:5px;}”)); ...
07 QWidget界面重绘update()刷新界面:调用QWidget::update()函数不会立即重绘界面,而是把绘制指令放到主消息循环,由主消息循环统一调用绘制窗体 // 重绘整个区域voidupdate()// 以下三个函数只重绘指定区域inlinevoidupdate(int x, int y, int w, int h)voidupdate(const QRect &rect)voidupdate(const ...
setBrush(Qt::white); // 设置窗体颜色 QRect rect = this->rect(); // 绘制方式1 painter.drawRoundedRect(rect,10,10); // 绘制方式2 // QPainterPath painterPath; // painterPath.addRoundedRect(rect, 10, 10); // painter.drawPath(painterPath); } ...