繁体   English   中英

Qt如何从QVector的数据创建位图并将其显示在小部件上?

[英]Qt how to create bitmap from data from QVector and show it on widget?

我想知道如何从数据创建位图并将其显示在小部件上。

我有QVector向量,它是绘制图表的某些点的向量。 如何使用QBitmap在我的窗口小部件上重绘? 我不想简单地在小部件上绘制,我更喜欢将像素图传递给小部件,只是为了显示它。

我怎样才能做到这一点?

我的代码:

QPainter painter(pixMap);
painter.setPen(QPen(Qt::black, 2));
painter.drawPolyline(this->data.data(), this->data.size());
painter.drawLine(QPointF(5,5),QPointF(50,50));

setPixmap(*pixMap);

这是我的示例代码。 为什么不起作用? 我在小部件上看不到任何东西。

在此处输入图片说明

我有小部件类

class Widget : public QLabel
{
  public:
    Widget(QVector<QPointF> * data);
    ~Widget();
  protected:
    void paintEvent(QPaintEvent * event);
  private:
    QVector<QPointF> data;
    QPixmap *pixMap;
};

在构造函数中,我有

 Widget::Widget(QVector<QPointF> * data){
   pixMap = new QPixmap(300,300);
   pixMap->fill(Qt::red);
 }

并在paintEvent中

void Waveform::paintEvent(QPaintEvent *event)
{
  QPainter painter(pixMap);
  painter.setPen(QPen(Qt::white, 2));
  painter.drawPolyline(this->data.data(), this->data.size());
  painter.drawLine(QPointF(5,5),QPointF(50,50));
  setPixmap(*pixMap);
}

如果我用QPainter painter(pixMap)替换QPainter painter(pixMap) QPainter painter(this) ,我可以看到我的图表。 但是我想使用pixmap。

我是这样认为的,但是我不确定没有完整的代码,现在我绝对可以确定。 您应该对paintEvent进行标准处理。 所以试试这个:

void Waveform::paintEvent(QPaintEvent *e)
{
    static const QPointF points[3] = {
        QPointF(10.0, 80.0),
        QPointF(20.0, 10.0),
        QPointF(80.0, 30.0),
    };
    QPainter painter(pixMap);
    painter.setPen(QPen(Qt::black, 2));
    painter.drawPolyline(points, 3);
    painter.drawLine(QPointF(5,5),QPointF(50,50));
    setPixmap(*pixMap);
    QLabel::paintEvent(e);//standard processing
}

但是我认为您根本不需要paintEvent,那么您可以从类中完全删除paintEvent或执行

void VertLabel::paintEvent(QPaintEvent *e)
{
    QLabel::paintEvent(e);//in this case you don't need paintEvent at all, remove it from cpp and header files
}

并在构造函数中:

   pixMap = new QPixmap(300,300);
   pixMap->fill(Qt::red);
   this->resize(300,300);
   static const QPointF points[3] = {
       QPointF(10.0, 80.0),
       QPointF(20.0, 10.0),
       QPointF(80.0, 30.0),
   };
   QPainter painter(pixMap);
   painter.setPen(QPen(Qt::black, 2));
   painter.drawPolyline(points, 3);
   painter.drawLine(QPointF(5,5),QPointF(50,50));
   setPixmap(*pixMap);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM