• 10500阅读
  • 15回复

*****************QT? *** 在新建的QWidget上怎么画矩形? ******************** [复制链接]

上一主题 下一主题
离线rockyluo
 

只看楼主 倒序阅读 楼主  发表于: 2008-08-05
— 本帖被 XChinux 执行加亮操作(2008-08-05) —
现在已经有个Form1继承QWidget
我在Form1上又新建了个窗体 :  QWidget  *f1 = new  QWidget ( this ) ; 
上面准备放些其它按钮、文本
我现在要在 f1所指的窗体 上画图, 应该怎么做?

看了《24小时学通QT编程》,上面说要将绘图代码放置在一个paintEvent( )的特殊函数内,如下
void Form : : paintEvent ( QPaintEvent *)
{
        Qpainter  * paint ;
        paint  = new QPainter;
        paint -> begin (  f1 );                  //此处填的为  f1  ,但出不了下面画的矩形来,为啥???       
        paint -> drawRect ( 20,20,160,160 ) ;
        paint -> end( );
}

QT高手指教~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 此贴被rockyluo在2008-08-06 09:29重新编辑 ]
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线rockyluo

只看该作者 1楼 发表于: 2008-08-05
顶个先~~~~~~~
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线water_wf

只看该作者 2楼 发表于: 2008-08-05
paint  = new QPainter(this);
离线rockyluo

只看该作者 3楼 发表于: 2008-08-05
引用第2楼water_wf于2008-08-05 17:40发表的  :
paint  = new QPainter(this);


出是出来了,可是显示的还是在Form1上,也就是this所指的窗体
f1 所指的那个窗体上面还是没显示
并且运行后出现:
QPainter : : begin :  Painter is already active.
                        You must end( )  the painter before a second begin( )
忘再次赐教!!!
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线water_wf

只看该作者 4楼 发表于: 2008-08-05
Re:*********QT  *  在新建的QWidget上怎么画矩形?***********
理解你的意思了,你可以在f1的paintevent 里面画 啊,或者在这里post一个
event,在f1那里画
离线nmiirq

只看该作者 5楼 发表于: 2008-08-06
楼上说嘀对,你搞错paint的对象了,画在了Form1上面
离线duduqq

只看该作者 6楼 发表于: 2008-08-06
那本书太旧了,那是QT2的,现在开发都是QT4了
离线rockyluo

只看该作者 7楼 发表于: 2008-08-06
Re:Re:*********QT? *? 在新建的QWidget上怎么画矩形?***********
引用第4楼water_wf于2008-08-05 19:40发表的 Re:*********QT  *  在新建的QWidget上怎么画矩形?*********** :
理解你的意思了,你可以在f1的paintevent 里面画 啊,或者在这里post一个
event,在f1那里画


f1 是个指针,关键怎么用它来“重绘”一个piantevent呢?(C++不好,不知道是不是用重绘这个词)
“或者在这里post一个event,在f1那里画”这是什么意思?
还望具体说说!!!不胜感激!
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线rockyluo

只看该作者 8楼 发表于: 2008-08-06
引用第5楼nmiirq于2008-08-06 00:39发表的  :
楼上说嘀对,你搞错paint的对象了,画在了Form1上面



nmiirq 兄,我也感觉是你说的这样,但应该怎么做呢?
不胜感激!
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线浪漫天使
只看该作者 9楼 发表于: 2008-08-06
void Form : : paintEvent ( QPaintEvent *)
{
        Qpainter  * paint ;
        paint  = new QPainter;
        paint -> begin (  f1 );                  //此处填的为  f1  ,但出不了下面画的矩形来,为啥???       
        paint -> drawRect ( 20,20,160,160 ) ;
        paint -> end( );
}
你看到没有 ,你写的是 Form的paintEvent 而不是f1对应的类的paintEvent ,人家的意思就是说你这个paintEvent 的对象不对,应该是写在f1对应的类的paintEvent  能听懂我们的意思么?
离线rockyluo

只看该作者 10楼 发表于: 2008-08-06
引用第9楼浪漫天使于2008-08-06 08:38发表的  :
void Form : : paintEvent ( QPaintEvent *)
{
        Qpainter  * paint ;
        paint  = new QPainter;
        paint -> begin (  f1 );                  //此处填的为  f1  ,但出不了下面画的矩形来,为啥???       
.......



懂你们的意思,关键我应该怎么做?
此处f1 为一个指针,
void Form : : paintEvent ( QPaintEvent *)      //此处应如何修改,是要重新定义个类么?
{
        Qpainter  * paint ;
        paint  = new QPainter;
        paint -> begin (  f1 ); 
.........
}
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线rockyluo

只看该作者 11楼 发表于: 2008-08-06
顶起!
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线wsjdmc

只看该作者 12楼 发表于: 2008-08-06
可能是没触发重绘事件

你在QWidget  *f1 = new  QWidget ( this ) ; 
后面加一句this->repaint()试试

只看该作者 13楼 发表于: 2008-08-07
楼主,有结果了吗?我最近也在为这些问题而烦恼呀!
如果有结果请赐教心得!!
离线love0105

只看该作者 14楼 发表于: 2008-08-11
我也遇到了类似的问题,希望有高手回复
离线nliuser
只看该作者 15楼 发表于: 2008-09-06
class MyLabel:public QLabel
{
public:
    MyLabel(QWidget *);
    void paintEvent(QPaintEvent *);
};
MyLabel::MyLabel(QWidget *widget):QLabel(widget)
{
}
void MyLabel::paintEvent(QPaintEvent *pe)
{
    QPainter *paint = new QPainter(this);
    paint->setPen(blue);
    int x = 10;
    int y = 10;
    int d = 20;
    paint->drawLine(0,y+d,x+d,y+d);
    paint->drawLine(x+d,0,x+d,y+d);
    paint->end();
}
class MyMainWindow:public QWidget
{
public:
    MyMainWindow();
protected:
private:
//    void paintEvent(QPaintEvent *);
    MyLabel *label;
};

MyMainWindow::MyMainWindow()
{
    label = new MyLabel(this);
    label->setGeometry(50,50,100,50);
    label->setText("my own label");
    resize(200,160);   
}


按照上面的例子就可以实现。但不建议这么做。
快速回复
限100 字节
 
上一个 下一个