QPixmap未显示在Qt的对话框中

问题描述 投票:0回答:1

我正在尝试在窗口上显示像素图,但是由于某种原因,它这次不会显示(我之前已经做过,但是无法指出我出了错的地方)。

这里是最小可复制产品:

#include "recieverWindow.h"
#include "window.h"
#include "ui_window.h"



RecvWindow::RecvWindow(QWidget *parent) :
    QMainWindow(parent),  ui(new Ui::Window)
{
  drawTesting();
  ui->setupUi(this);
 setWindowTitle("Recieve Window");


}
void RecvWindow::paintEvent (QPaintEvent *recieverWindowOutput)
{
    QPainter recievePainter(this);
    recievePainter.drawPixmap(rect(),pixRecieve);
}

void RecvWindow::drawTesting()
{
    QPainter painter(&pixRecieve);
    QPoint p1,p2;
    p1.setX(10);
    p1.setY(10);
    p2.setX(100);
    p2.setY(100);
    painter.drawLine(p1,p2);
    update();
}
RecvWindow::~RecvWindow()
{
   delete ui;
}

在此,我已经声明了QPixmap,但是由于某种原因它不会显示,我是否需要像小部件一样显示。这些也分别是我使用过的.h文件:

window.h

#ifndef WINDOW_H
#define WINDOW_H

#include <QMainWindow>
#include <QBrush>
#include <QPen>
#include <QPixmap>
#include <QWidget>
#include <QMouseEvent>
#include <QPainter>
#include <QtDebug>
#include <QPushButton>
//#include "recieverwindow.h"
namespace Ui {
class Window;
}

class Window : public QMainWindow
{
    Q_OBJECT

public:
    explicit Window(QWidget *parent = 0);
    QPixmap pix;
    ~Window();
public slots:
       void clearImage();

private:
    Ui::Window *ui;
   // void makeLineTo(const QPoint &endingPoint);

    void testButton();
    bool drawing;
    //bool changed;
    QPoint lastRecordedPoint;
    QPoint endingPoint;
    //QImage image;

    QPushButton *clear_button;


protected:
    void paintEvent(QPaintEvent *userDrawingOutput) ;
   //void mouseReleaseEvent(QMouseEvent * userDrawingInput) override;
    void mouseMoveEvent(QMouseEvent * userDrawingInput) ;
    void mousePressEvent(QMouseEvent * userDrawingInput) ;
    void resizeEvent(QResizeEvent *e) ;
};

#endif // WINDOW_H

recieverWindow.h

#ifndef RECVWINDOW_H
#define RECVWINDOW_H

#include <QWidget>
#include <QMouseEvent>
#include <QPainter>
#include <QtDebug>
#include <QPushButton>
#include <QMainWindow>
#include <QPixmap>
#include <QPainter>

//#include "recieverwindow.h"



#include <QMainWindow>


namespace Ui {
class Window;
}

class RecvWindow : public QMainWindow
{
    Q_OBJECT
private:
  Ui::Window *ui;
public:
    void drawTesting();
    QPixmap  pixRecieve;
    explicit RecvWindow(QWidget *parent = 0);
    ~RecvWindow();
protected:
  void paintEvent (QPaintEvent *recieverWindowOutput);
};

#endif // RECVVWINDOW_H
c++ qt user-interface qt5
1个回答
0
投票

在我在ResizeEvent中而不是在Widgets构造函数中实例化之前显示像素图时显示出来。

pixRecieve=QPixmap(size());
  pixRecieve.fill();

但是这次我在构造函数中做到了,因为在此小部件中不需要ResizeEvent。

为了构造QPixMap,您需要将PixMap的大小输入到构造函数中。

size()函数保留窗口的当前大小,以便Pixmap可以填充整个窗口。

© www.soinside.com 2019 - 2024. All rights reserved.