gpt4 book ai didi

Qt初学者QPainter和QRect

转载 作者:行者123 更新时间:2023-12-03 06:49:36 25 4
gpt4 key购买 nike

我将如何绘制矩形?

我尝试了两种不同的方法;

void MyWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::black);
QRect rect = QRect(290, 20, 70, 40);
painter.drawText(rect, Qt::AlignCenter,
"Data");
painter.drawRect(rect);
}

哪个工作正常(即使未命名也不使用该参数),但是我不想使用QPaintEvent *我没有用。

因此,我尝试仅重命名我的功能;
void MyWidget::draw()
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::black);
QRect rect = QRect(290, 20, 70, 40);
painter.drawText(rect, Qt::AlignCenter,
"Data");
painter.drawRect(rect);
}

这不会显示任何内容(但没有错误)。

如果我不使用QPaintEvent *,为什么会不起作用?

最佳答案

绘画事件是绘画系统在需要重绘窗口小部件时调用的方法。这就是为什么简单地命名自己的方法不起作用的原因。油漆系统从不调用它。

您确实应该使用QPaintEvent。它为您提供了需要绘制的矩形。该矩形将基于窗口小部件的大小,因此,不要在绘画事件中使用显式矩形,而将窗口小部件设置为正确的大小。如果您的小部件移动,调整大小等,将会生成一个绘画事件。

void MyWidget::paintEvent(QPaintEvent *event)
{
QRect rect = event->rect();
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::black);
painter.drawText(rect, Qt::AlignCenter,
"Data");
painter.drawRect(rect);
}

现在,如果您想将绘画逻辑分为另一种方法,那就很好了。但是您需要从paint事件中调用它:
void MyWidget::paintEvent(QPaintEvent *event)
{
QRect rect = event->rect();
draw(rect);
}

void MyWidget::draw(QRect &rect)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::black);
painter.drawText(rect, Qt::AlignCenter,
"Data");
painter.drawRect(rect);
}

如果您要完全绕开您所说的绘制事件,而只想创建一个静态矩形进行显示,则一种方法是将其绘制到像素图一次并在QLabel中显示:
QPixMap pix(200,100);
QPainter painter(&pix);
// do paint operations
painter.end()
someLabel.setPixmap(pix)

关于Qt初学者QPainter和QRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14101297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com