Qt-具有自定义参数的可重用绘制函数

Qt - reusable paint functions with custom arguments

本文关键字:绘制 函数 自定义 参数 Qt-      更新时间:2023-10-16

我在互联网上浏览了很多关于这方面的材料,但没有找到我需要的东西。我想在Qt中制作一个可重复使用的绘画功能。例如,我会有一个

void paintRectangle(QPaintEvent*, int x, int y);

函数,我可以在循环中调用它,并从x和y坐标开始绘制一个矩形。这可能吗?你能写下我应该如何写的草稿/提纲吗?以及当它准备好后,我如何在循环中调用它?我真的没有发现任何关于这个的东西。另外,我该如何调用此函数?打电话时用什么代替QPaintEvent *

正如我所注意到的,paintevents在任何类构造函数之前都会被调用。这是正确的吗?我希望在屏幕上有一定数量的矩形,这取决于一个n变量,当某个类被实例化时,该变量被声明。在我目前的试验中,当我的功能试图绘制任何东西时,似乎n是未定义的。

唯一的限制是,当您在小部件上绘制时,它必须发生在该小部件的绘制事件中。如果你的绘画设备不是一个小部件,那也没关系。

除此之外,没有什么可以阻止您使用所需的任何参数多次调用任何数量的绘制函数,只需确保在小部件的绘制事件中调用它们即可。例如:

void paintEvent(QPaintEvent *) {
    QPainter p(this);
    // setup painter
    for (int i = 0; i < 200; i += 10) drawFoo(i, p);
}
void drawFoo(int i, QPainter & p) {
    p.drawPoint(i, i);
}

正如我所注意到的,paintevents在任何类构造函数之前都会被调用。这是正确的吗?

你在哪里注意到的?我非常怀疑一个小部件在构造之前是否会被绘制;)您的担心是没有根据的,在构建之前没有绘制任何小部件,事实上,如果您不调用show(),您可以在不绘制小部件的情况下构建它。如果在构造函数和绘制事件中放入调试消息,您将看到构造函数始终在绘制事件之前执行。事实上,调用尚未完全构造的对象的成员函数是完全"非法"的。