这里我们需要重写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);
}
QT中QPainter的使用及矩形、圆形等常见图形的画法
#include<QApplication> #include <QWidget> #include <QPainter> class MyMainWindow:public QWidget { public: MyMainWindow(QWidget *parent = 0); private: void paintEvent(QPaintEvent*); QPainter *paint; };
void MyMainWindow::paintEvent(QPaintEvent*)
//paintEvent函数由系统自动调用,用不着我们人为的去调用。 { paint=new QPainter; paint->begin(this); paint->setPen(QPen(Qt::blue,4,Qt::DashLine));//设置画笔形式 paint->setBrush(QBrush(Qt::red,Qt::SolidPattern));//设置画刷形式 paint->drawRect(20,20,160,160); paint->end(); }
MyMainWindow::MyMainWindow(QWidget*parent):QWidget(parent) { setGeometry(100,100,200,200); }
int main(int argc,char**argv) { QApplication a(argc,argv); MyMainWindow w; w.show(); return a.exec(); }