• 5352阅读
  • 9回复

要画个矩形,帮看看我的问题出在什么地方,谢谢 [复制链接]

上一主题 下一主题
离线sunwj
 
只看楼主 倒序阅读 楼主  发表于: 2008-12-07
— 本帖被 XChinux 执行加亮操作(2008-12-08) —
我想画个矩形,大家帮我看看问题出在什么地方了,我建立了一个类RenderArea,下面是代码,不长,谢谢

line.zip (3 K) 下载次数:4
源码,文件,谢谢

renderarea.h:
#ifndef RENDERAREA_H
#define RENDERAREA_H

#include <QWidget>

class RenderArea : public QWidget
{
public:
    RenderArea();
public slots:
    void drawLine();
protected:
    void paintEvent(QPaintEvent *);
};

#endif // RENDERAREA_H


renderarea.cpp:
#include "renderarea.h"

RenderArea::RenderArea()
{
    setBackgroundRole(QPalette::Base);
    setAutoFillBackground(true);
}

void RenderArea::drawLine()
{
    update();
}
void RenderArea::paintEvent(QPaintEvent *)
{
    QRect rect(10, 20, 100, 400);
}

window.h:
#include <QtGui/QWidget>
#include "ui_window.h"
#include "renderarea.h"

class RenderArea;

class Window : public QWidget
{
    Q_OBJECT

public:
    Window(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~Window();
private slots:
    void draw();
private:
    Ui::WindowClass ui;
    RenderArea *renderArea;
};

#endif // WINDOW_H


window.cpp:
#include "window.h"

Window::Window(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    ui.setupUi(this);
    draw();
}

Window::~Window()
{

}
void Window::draw()
{
    renderArea->drawLine();
}
折腾了几天了,这个简单的问题还搞不定,哎~~~
[ 此贴被sunwj在2008-12-08 10:08重新编辑 ]
离线nmiirq

只看该作者 1楼 发表于: 2008-12-07
void RenderArea::paintEvent(QPaintEvent *)
{
    QRect rect(10, 20, 100, 400);
}

你这样能行吗?
离线sunwj
只看该作者 2楼 发表于: 2008-12-07
引用第1楼nmiirq于2008-12-07 14:53发表的  :
void RenderArea::paintEvent(QPaintEvent *)
{
    QRect rect(10, 20, 100, 400);
}
.......



该成如下形式了,还是不行,似乎其他地方还有问题,提示遇到问题关闭
void RenderArea::paintEvent(QPaintEvent *)
{
    QRect rect(10, 20, 100, 400);

    QPainter painter;

    painter.drawRect(rect);
}
离线nmiirq

只看该作者 3楼 发表于: 2008-12-07
void RenderArea::paintEvent(QPaintEvent *)
{
    QRect rect(10, 20, 100, 400);

    QPainter painter;

    painter.drawRect(rect);
}


改成以下试试:
void RenderArea::paintEvent(QPaintEvent *)
{
    QRect rect(10, 20, 100, 400);

    QPainter painter(this);

    painter.drawRect(rect);
}
离线sunwj
只看该作者 4楼 发表于: 2008-12-07
改成那样了,还是不行

我怀疑RenderArea要做为一个widget加到Window上面,机理还不太清楚,再研究……

谢谢nmiirq
离线nmiirq

只看该作者 5楼 发表于: 2008-12-07
引用第4楼sunwj于2008-12-07 20:20发表的  :
改成那样了,还是不行
我怀疑RenderArea要做为一个widget加到Window上面,机理还不太清楚,再研究……
谢谢nmiirq


你的main.cpp呢~
方便的话,可以把相关的文件打个压缩包,传上来我们看一下,应该问题不大!
离线water_wf

只看该作者 6楼 发表于: 2008-12-07
1: 没有pen 和brush
2:代码没有执行,定义个Layout把这个widget加到主窗口中
离线sunwj
只看该作者 7楼 发表于: 2008-12-08
引用第5楼nmiirq于2008-12-07 21:44发表的  :
你的main.cpp呢~
方便的话,可以把相关的文件打个压缩包,传上来我们看一下,应该问题不大!


我已经将源码打包放到1楼了,谢谢哥哥
我在RenderArea里面加个this->show();可以看到矩形,但是是两个窗口,估计应该是像water_wf,说的那样,定义一个Layout。

谢谢nmiirq,同时也谢谢water_wf
离线snow_man_0

只看该作者 8楼 发表于: 2008-12-08
renderArea = new RenderArea(this);// 应给它个parent,见附件
附件: line.rar (16 K) 下载次数:8
离线sunwj
只看该作者 9楼 发表于: 2008-12-10
引用第8楼snow_man_0于2008-12-08 10:43发表的  :
renderArea = new RenderArea(this);// 应给它个parent,见附件


很感谢,谢谢
快速回复
限100 字节
 
上一个 下一个