c++ - QLabel 上的绘图点错误

标签 c++ qt qlabel

我正在尝试在 Qt 中绘制 QLabel,如下所示:

paintscene.h:

class PaintScene : public QWidget
{
    Q_OBJECT
public:
    PaintScene(QWidget* parent = NULL);

    QVector<QLabel*> _layers;
    QColor _color;
    int _width;

    void mousePressEvent(QMouseEvent* event);

private slots:
    void updateWidth();
};

paintscene.cpp:

PaintScene::PaintScene(QWidget* parent) : QWidget(parent)
{
    _width = 10;
    _color = Qt::red;
    QLabel* inital = new QLabel(this);
    inital->setStyleSheet("QLabel { background-color : white; }");
    _layers.push_back(inital);

    QGridLayout* layout = new QGridLayout();
    layout->addWidget(inital, 1, 1, 1, 1);
    this->setLayout(layout);
}

void PaintScene::mousePressEvent(QMouseEvent *event)
{
    QImage tmp = _layers.back()->pixmap()->toImage();
    QPainter painter(&tmp);
    QPen paintpen(_color);
    paintpen.setWidth(_width);
    painter.setPen(paintpen);
    painter.drawPoint(event->x(), event->y());
    _layers.back()->setPixmap(QPixmap::fromImage(tmp));
}

列表是必需的,因为我想用层(QLabel - 一个单独的层)来实现工作。

但是,我得到一个错误,程序终止。错误发生在 QImage tmp = _layers.back()->pixmap()->toImage(); 行。

是什么让这一切发生?这怎么能解决?也许层使用不同的东西,而不是 QLabel

最佳答案

@Jeremy Friesner关于错误原因是正确的,没有 QPixmap 这将是空的,在我的回答中我将展示一个可能的解决方案

void PaintScene::mousePressEvent(QMouseEvent *event)
{
    QLabel *label = _layers.back();
    const QPixmap *pix= label->pixmap();
    QPixmap pixmap;
    if(pix)
        pixmap =  *pix;
    else{
        pixmap = QPixmap(label->size());
        pixmap.fill(Qt::transparent);
    }
    QPainter painter(&pixmap);
    QPen paintpen(_color);
    paintpen.setWidth(_width);
    painter.setPen(paintpen);
    painter.drawPoint(event->pos());
    painter.end();
    label->setPixmap(pixmap);
}

enter image description here

关于c++ - QLabel 上的绘图点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50549045/

相关文章:

linux - 如何在Kcachegrind中查看源码

c++ - STL 或 Qt 容器?

c++ - qt gui使用Qfiledialogbox和qlabel显示视频。这是我的代码

c++ - Arduino Uno+伺服电机(SG-90)+超声波传感器(HC-S04)检测障碍物

C++ 前向声明

c++ - LLVM 符号查找困难

c++ - 无法计算位数作为输入

python - PyQt,如何更改 BoxLayout 的权重(大小)

c++ - 布局下的Qlabel

c++ - Qlabel settext 正在崩溃