• 5494阅读
  • 8回复

关于QPainter [复制链接]

上一主题 下一主题
离线imho
 
只看楼主 倒序阅读 楼主  发表于: 2007-09-12
— 本帖被 XChinux 执行加亮操作(2007-09-13) —
我新建了一个类myPanel 断承了QWidget
我用QPainter在myPanel上画线,
但是当程序还没显示出来,也就是在myPanel()函数中画线的时候没效果。

我在myPanel建了一个QPushButton 等 程序显示出来用QPushButton click事件中画线就能正常显示出线来,不知道为什么,难道程序不显示出来就不可以画线吗?

知道的人请帮个忙,谢谢。
[ 此贴被XChinux在2007-09-13 09:10重新编辑 ]
离线imho
只看该作者 1楼 发表于: 2007-09-12
知道问题在哪了。晕死
离线imho
只看该作者 2楼 发表于: 2007-09-13
虽然知道问题了,但是不知道怎么解决,当用QPainter画完了线,界面刷新就没有了,如何让他还存在呢?
以前做Win 程序的时候在TImage上就可以,不知道可不可以达到这个效果。
离线xinqingfly

只看该作者 3楼 发表于: 2007-09-13
重载paintEvent函数,在函数中调用你画曲线的代码
菜鸟也是鸟
离线imho
只看该作者 4楼 发表于: 2007-09-13
哈哈,谢谢,我刚在demo里找到相关的代码,谢谢了

我听别人说可以开双缓冲,怎么开呀,用来加快画的速度的。
离线xinqingfly

只看该作者 5楼 发表于: 2007-09-13
先在内存中画好图形 再拷贝到你的画板上
菜鸟也是鸟
离线youngst

只看该作者 6楼 发表于: 2007-09-14
Example:

    void CuteWidget::paintEvent( QPaintEvent *e )
    {
        QRect ur = e->rect();            // rectangle to update
        QPixmap pix( ur.size() );        // Pixmap for double-buffering
        pix.fill( this, ur.topLeft() );  // fill with widget background

        QPainter p( &pix );
        p.translate( -ur.x(), -ur.y() ); // use widget coordinate system
                                        // when drawing on pixmap
        //    ... draw on pixmap ...

        p.end();

        bitBlt( this, ur.topLeft(), &pix );
    }
    这是双缓冲的,QT手册中QPixmap Class例子
离线imho
只看该作者 7楼 发表于: 2007-09-15
谢谢大家,基本上是可以了,但是我又遇到一个问题
在用drawText的时候字体太小了,有没有办法调一下字号大小。
我用setPen( QPen( red,64 ) );来设置好像没什么作用呀。
离线imho
只看该作者 8楼 发表于: 2007-09-15
哈哈,在demo里找到了,
QFont f( "times", 18, QFont::Bold );
setFont( f );

就可以了。
快速回复
限100 字节
 
上一个 下一个