我正在尝试在窗口上显示像素图,但是由于某种原因,它这次不会显示(我之前已经做过,但是无法指出我出了错的地方)。
这里是最小可复制产品:
#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
在我在ResizeEvent中而不是在Widgets构造函数中实例化之前显示像素图时显示出来。
pixRecieve=QPixmap(size());
pixRecieve.fill();
但是这次我在构造函数中做到了,因为在此小部件中不需要ResizeEvent。
为了构造QPixMap,您需要将PixMap的大小输入到构造函数中。
size()
函数保留窗口的当前大小,以便Pixmap可以填充整个窗口。