程序已修改过,现在可以填充到一个矩形的区域,但是画直线的时候水平直线和垂直直线都是透明的,斜线和圆之类的就可以画出来,很奇怪
#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重新编辑 ]