1。问题描述
当程序正常运行时调用this可以正常工作,但在 Debug 模式下执行时会导致它崩溃。任何想法是什么原因?
2。环境
第3。示例代码
MainWindow.h
#include "MainWindow.h"
#include "Painter.h"
#include <QLabel>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
auto *label = new QLabel(this);
label->setPixmap(Painter().paint());
setCentralWidget(label);
}
MainWindow.cpp
#include <QObject>
class Painter : public QObject
{
Q_OBJECT
public:
explicit Painter(QObject *parent = nullptr);
QPixmap paint();
};
Painter.h
#include "Painter.h"
#include <QPainter>
Painter::Painter(QObject *parent) : QObject(parent)
{
}
QPixmap Painter::paint()
{
QPainter painter;
QPixmap pixmap(16, 16);
pixmap.fill(Qt::transparent);
painter.begin(&pixmap); // <-- program crashes here on Debug
return pixmap;
}
Painter.cpp
<div class="dropdown">
<button id="dropdown-wifi" class="extended-button" onclick="showDropDown()">Available WiFi Hot Spots</button>
<div id="ssid-dropdown" class="dropdown-content">
<!-- drop-down menu items dynamically created by JavaScript -->
</div>
</div>
4。调试器的输出
答案 0 :(得分:2)
从bugreports.qt.io/browse/QTBUG-64581重新发布
如果您开始使用QPainter :: begin()进行绘画,那么在绘画完成之前,您可能会通过QPaintDevice并且QPaintEngine处于活动状态。 绘画处于活动状态时不应销毁QPaintEngine(不调用end())。 在示例中,QPixmap在QPainter完成绘制之前被销毁。 需要先调用end()或确保pixmap存活。