如何使用 QPainter 绘制椭圆?
How can I draw an ellipse using QPainter?
我想在 UI 中绘制椭圆,但我的代码不起作用。
QWidget::paintEngine:不应再调用
QPainter::begin:绘画设备返回引擎 == 0,类型:1
Mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow), pm(100,100)
{
ui->setupUi(this);
//set_form_style();
draw_ellipse();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::set_form_style(){
//setWindowFlags(Qt::FramelessWindowHint);
//setAttribute(Qt::WA_TranslucentBackground);
//ui->widget->setStyleSheet("background:transparent;");
setMouseTracking(true);
}
void MainWindow::draw_ellipse(){
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(QBrush(Qt::red, Qt::SolidPattern));
painter.drawEllipse(100, 50, 150, 150);
}
为什么不直接创建一个 svg,添加资源文件,然后在标签、图像或其他任何地方使用该 svg。我是新手,但我认为它会完成工作,因为我以前用这种方式做过同样的事情,但对你来说可能会有所不同,我不能这么确定。
问题不在于您使用 QPainter
的方式,而在于您获取它的时间。
正如 reference documentation 所说,“QPainter 的常见用途是在小部件的绘制事件中”。因此,如果您想在主 window 中进行自定义绘画,请覆盖 paintEvent
并将您的代码放在那里。
我想在 UI 中绘制椭圆,但我的代码不起作用。
QWidget::paintEngine:不应再调用 QPainter::begin:绘画设备返回引擎 == 0,类型:1
Mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow), pm(100,100)
{
ui->setupUi(this);
//set_form_style();
draw_ellipse();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::set_form_style(){
//setWindowFlags(Qt::FramelessWindowHint);
//setAttribute(Qt::WA_TranslucentBackground);
//ui->widget->setStyleSheet("background:transparent;");
setMouseTracking(true);
}
void MainWindow::draw_ellipse(){
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(QBrush(Qt::red, Qt::SolidPattern));
painter.drawEllipse(100, 50, 150, 150);
}
为什么不直接创建一个 svg,添加资源文件,然后在标签、图像或其他任何地方使用该 svg。我是新手,但我认为它会完成工作,因为我以前用这种方式做过同样的事情,但对你来说可能会有所不同,我不能这么确定。
问题不在于您使用 QPainter
的方式,而在于您获取它的时间。
正如 reference documentation 所说,“QPainter 的常见用途是在小部件的绘制事件中”。因此,如果您想在主 window 中进行自定义绘画,请覆盖 paintEvent
并将您的代码放在那里。