用qt做画图板的问题

lzhpopo_hoho 2014-12-11 04:30:38
菜鸟一个,比着网上的代码敲的,敲完之后不显示画板,真心求教
#ifndef PAINTAREA_H
#define PAINTAREA_H

#include <QWidget>
#include<QPixmap>
class paintarea : public QWidget
{
Q_OBJECT

public:
explicit paintarea(QWidget *parent = 0);
//paintarea(QPixmap& pixmap2);
//~paintarea();
void paint(QPixmap& pximap1);

protected:
void mousePressEvent(QMouseEvent*);
void mouseMoveEvent(QMouseEvent*);
void mouseReleaseEvent(QMouseEvent*);
void paintEvent(QPaintEvent*);

private:
QPixmap pixmap;
QPoint beginpoint,endpoint;
QRgb backcolor;

signals:

public slots:

};

#endif // PAINTAREA_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QtGui>
#include<QtCore>
#include<QMessageBox>
#include<paintarea.h>
paintarea* area;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
area=new paintarea;
}

MainWindow::~MainWindow()
{
delete ui;
}

#include "paintarea.h"
#include <QMouseEvent>
#include<QPoint>
#include<QPainter>
#include<QPixmap>
paintarea::paintarea(QWidget *parent) :
QWidget(parent)
{
pixmap=QPixmap(400,300);
backcolor=qRgb(255,255,255);
pixmap.fill(backcolor);
}

/*void paintarea::paintarea(QPixmap& pixmap2)
{
pixmap=QPixmap(400,300);
}*/

void paintarea::paint(QPixmap& pixmap1)
{
QPainter pt(&pixmap1);
pt.drawLine(beginpoint,endpoint);
beginpoint=endpoint;
}

void paintarea::paintEvent(QPaintEvent *)
{
QPainter pp(this);
pp.drawPixmap(0,0,pixmap);
}

void paintarea::mousePressEvent(QMouseEvent* event)
{
if(event->button() == Qt::LeftButton)
beginpoint=event->pos();

}

void paintarea::mouseMoveEvent(QMouseEvent*event)
{
if(event->button()&Qt::LeftButton)
endpoint=event->pos();
paint(pixmap);
}

void paintarea::mouseReleaseEvent(QMouseEvent*event)
{
if(event->button()==Qt::LeftButton)
endpoint=event->pos();
paint(pixmap);
}

哎确实不怎么会QT的GUI啊%>_<%
...全文
390 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小修凌云 2014-12-14
  • 打赏
  • 举报
回复
加上this比较好
new PaintArea(this);
另外,你的应该还不能显示线条,要update()一下,最好搭配QTimer
小修凌云 2014-12-14
  • 打赏
  • 举报
回复

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    area = new PaintArea;

    setCentralWidget(area);
}
cnyfk 2014-12-11
  • 打赏
  • 举报
回复
你new paintarea的时候要传入父窗口的指针 new paintarea(this)
fly_dragon_fly 2014-12-11
  • 打赏
  • 举报
回复
QT有些可能记得不是很清楚了,新建widget没大小看不见,mainwindow内部有layoUT,作为子控件会得到大小
lzhpopo_hoho 2014-12-11
  • 打赏
  • 举报
回复
非常感谢 方便的话能给我说下为什么吗?
fly_dragon_fly 2014-12-11
  • 打赏
  • 举报
回复

area=new paintarea;
改为 area=new paintarea(this);

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧