自定义widget类的paintEvent如何调用?

無念劍 2018-08-27 12:18:31
Qt新手求助,想在界面上绘制一个网格图,另实现了一个Form类用于绘图
class Form : public QWidget {
public:
int row, column;
Form(QWidget* parent, int r, int c) : QWidget(parent), row(r), column(c) {}
void paintEvent(QPaintEvent* ev) {
QPainter p(this);
double r_interval = 800.0 / column, c_interval = 600.0 / row;
for (int i = 1; i < row; i++) {
p.drawLine(c_interval * i, 0, c_interval * i, 800);
}
for (int j = 1; j < column; j++) {
p.drawLine(0, r_interval * j, 600, r_interval * j);
}
}
};

是这样调用的:
form = new Form(this, row, column);

但并没有调用Form的paintEvent函数,试过update或repaint都没用,查阅了很多类似问题的解决方案都不行……
...全文
2634 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gushansanren 2018-09-20
  • 打赏
  • 举报
回复
在父类里这个是 protected, 你的变成了public ,系统可能认为不是重载,用override 限定一下,或改成 protected 。
weixin_42856051 2018-09-05
  • 打赏
  • 举报
回复
一般是因为你的paintevent函数声明写错了,可在后面加override关键字,如有误会被编译器检查出来,另外,不要在头文件里写paintevent实现体
無念劍 2018-08-31
  • 打赏
  • 举报
回复
引用 4 楼 richer1015 的回复:
确定是没有调用?还是说你只是没看到你paintEvent画的内容?你先打印个log,或者debug跟踪下,看下是否进入了函数内,如果进入了,再看看是否你的画图逻辑有问题。
的确是没有调用,我跟踪过,没有进入painevent
richer1015 2018-08-29
  • 打赏
  • 举报
回复
确定是没有调用?还是说你只是没看到你paintEvent画的内容?你先打印个log,或者debug跟踪下,看下是否进入了函数内,如果进入了,再看看是否你的画图逻辑有问题。
芒果黑 2018-08-28
  • 打赏
  • 举报
回复
给form设置位置和大小啊,再设置个背景颜色确保他显示出来了,显示出来没有执行我是不信的
無念劍 2018-08-27
  • 打赏
  • 举报
回复
引用 1 楼 u013091719 的回复:
你先show()出来呀
我试过show也没用,而且我经过测试,可以确定是paintEvent函数根本没有被调用
聆听浪花 2018-08-27
  • 打赏
  • 举报
回复
你先show()出来呀

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧