我在互联网上经历了很多有关此事的材料,但我们找不到我需要的东西。我想在Qt中制作一个可重复使用的绘画功能。例如,我会有一个
void paintRectangle(QPaintEvent*, int x, int y);
函数,我可以在循环中调用并从x和y坐标开始绘制一个矩形。这可能吗?你能否写下关于如何编写它的草案/大纲以及如何在它准备好后在循环中调用它?我真的没有找到任何相关的东西。另外,我怎么称呼这个功能?在打电话时我会用QPaintEvent *
代替什么?
正如我所注意到的,在任何类构造函数之前都会调用paintevents。它是否正确?我希望在屏幕上有一定数量的矩形,这取决于n
变量,该变量在某个类被实例化时被声明。在我目前的试验中,当我的功能试图绘制任何东西时,似乎n
未定义。
答案 0 :(得分:1)
唯一的限制是当你在小部件上绘画时,它必须发生在小部件的绘画事件中。如果您的绘图设备不是小部件,那么它并不重要。
除此之外,没有任何东西阻止你使用你想要的任何参数多次调用任意数量的绘画函数,只需确保在小部件的情况下,它们在该小部件中被调用& #39;油漆事件。例如:
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);
}
你在哪里注意到了吗?我非常怀疑一个小部件在它构成之前会被绘制;)你的关注是没有根据的,没有小部件在构造之前被绘制,事实上,你可以构建一个小部件而不用绘制它 - 如果你不打电话{{ 1}}。如果在构造函数和绘制事件中放置调试消息,您将看到构造函数始终在绘制事件之前执行。事实上,它将完全是非法的&#34;调用尚未完全构造的对象的成员函数。正如我所注意到的,在任何类构造函数之前都会调用paintevents。 这是对的吗?