• 5456阅读
  • 2回复

大家试试这个程序,为什么我画的直线是透明的(问题已解决) [复制链接]

上一主题 下一主题
离线duduqq
 

只看楼主 倒序阅读 楼主  发表于: 2008-04-21
— 本帖被 XChinux 执行加亮操作(2008-04-22) —
程序已修改过,现在可以填充到一个矩形的区域,但是画直线的时候水平直线和垂直直线都是透明的,斜线和圆之类的就可以画出来,很奇怪
#include <QApplication>
#include <QWidget>
#include <QPixmap>
#include <QBitmap>
#include <QPoint>
#include <QPalette>
#include <QMouseEvent>
#include <QPainter>

class Myclass:public QWidget
{
    public:
        Myclass(QWidget *parent = 0);
    protected:
        void mouseMoveEvent(QMouseEvent *e);
        void mousePressEvent(QMouseEvent *e);
    private:
        QPainter *painter ;
        QPoint last,pos0;
};
Myclass::Myclass(QWidget *parent)
    : QWidget(parent,Qt::X11BypassWindowManagerHint)
{
    setGeometry(20,300,1000,800);
    QBrush brush;
    brush.setStyle(Qt::SolidPattern) ;
    brush.setColor(Qt::gray) ;
    QPixmap pixmap(800,120);
    painter =new QPainter(&pixmap) ;
    painter->save();
    painter->fillRect(0,0,800,120,brush) ;
   
    //painter->setBackgroundMode(Qt::OpaqueMode);
    //painter->begin(this) ;
    //painter->setBackground(brush) ;
    painter->setPen(Qt::red) ;
    painter->drawRect(0,0,1000,120) ;
    painter->drawLine(10,20,10,0) ;
    painter->restore();
 
    //painter->rotate(30) ;
    //painter->drawPixmap(10,10,pixmap) ;
    painter->end() ;
   
    QPalette palette;
    //palette.setColor(QPalette::Background,QColor(142,0,0)) ;
    palette.setBrush(QPalette::Background, QBrush(pixmap));
    setPalette(palette);
    //setMask(pixmap) ;
    setMask(pixmap.createHeuristicMask());//把这句改为setMask(pixmap.createHeuristicMask(false));
}
void Myclass::mouseMoveEvent(QMouseEvent *e)
{
    if (!(e->buttons() & Qt::LeftButton))
        return;
    QPoint newpos = e->globalPos();
    QPoint upleft = pos0 + newpos - last;
    move(upleft);
}
void Myclass::mousePressEvent(QMouseEvent *e)

    if (e->button() == Qt::LeftButton)
    last = e->globalPos();
    pos0 = e->globalPos() - e->pos();
}

int main(int argc,char *argv[])
{
    QApplication a(argc,argv);
    Myclass w;
    //w.show() ;
    w.showFullScreen();
    return a.exec();
}
[ 此贴被duduqq在2008-04-22 14:10重新编辑 ]
离线duduqq

只看该作者 1楼 发表于: 2008-04-22
程序已修改过,如上
离线wzc81614
只看该作者 2楼 发表于: 2008-04-22
Re:大家试试这个程序,为什么我画的直线是透明的
我试了你的程序出现一个黑色的矩形。。。。。。。。。。。。
快速回复
限100 字节
 
上一个 下一个