if (i < paths.size() && !paths[i].empty()) { std::cout << "paths have something" << endl; QPainter painter(this); painter.setPen(QPen(Qt::red, 5)); for (int j = 0; j < paths[i].size() - 1; j++) { if (paths[i][j] && paths[i][j + 1]) { // 检查点是否有效 QPoint start(paths[i][j]->x * 25 + 200, paths[i][j]->y * 25 + 50); QPoint end(paths[i][j + 1]->x * 25 + 200, paths[i][j + 1]->y * 25 + 50); painter.drawLine(start, end); // 直接绘制直线 } } },報錯:ASSERT: "s" in file painting\qpaintengine_raster.cpp, line 2316,修改一下
时间: 2024-01-20 10:03:59 浏览: 114
mojo-mojo编程示例之shortest-paths.zip
这个报错是由于QPainter在没有设置绘制设备的情况下进行绘制操作导致的。可以尝试在绘制之前先创建一个QPixmap或QImage对象,并将其设置为QPainter的绘制设备,例如:
```c++
if (i < paths.size() && !paths[i].empty()) {
std::cout << "paths have something" << endl;
QPixmap pixmap(this->size()); // 创建一个QPixmap对象,大小与当前窗口相同
pixmap.fill(Qt::transparent); // 将pixmap填充为透明色
QPainter painter(&pixmap); // 将pixmap设置为绘制设备
painter.setPen(QPen(Qt::red, 5));
for (int j = 0; j < paths[i].size() - 1; j++) {
if (paths[i][j] && paths[i][j + 1]) {
QPoint start(paths[i][j]->x * 25 + 200, paths[i][j]->y * 25 + 50);
QPoint end(paths[i][j + 1]->x * 25 + 200, paths[i][j + 1]->y * 25 + 50);
painter.drawLine(start, end);
}
}
painter.end(); // 必须在绘制完成后结束绘制操作
// 将绘制好的pixmap显示在窗口上
QLabel* label = new QLabel(this);
label->setPixmap(pixmap);
label->show();
}
```
这样就可以在窗口中显示绘制好的图像了。注意,在绘制完成后要调用QPainter的end()函数结束绘制操作。
阅读全文