Geo*_*Geo 1 c++ qt widget qprogressbar
我在自定义小部件中继承了QProgressBar,并使用以下代码覆盖了paintEvent方法:
void myProg::paintEvent(QPaintEvent *pe)
{
QProgressBar::paintEvent(pe);
QRect region = pe->rect();
QPainter *painter = new QPainter(this);
QPen *pen = new QPen;
painter->begin(this);
painter->setBrush(Qt::red);
int x = this->x();
int y = this->y();
pen->setWidth(10);
painter->setPen(*pen);
painter->drawLine(x,y,x+100,y);
painter->end();
}
Run Code Online (Sandbox Code Playgroud)
我试图显示一条红线作为起点,看看我可以将自己的修改添加到小部件.但是,这不起作用.我只将小部件视为常规QProgressBar.关于什么可能出错的任何想法?
您需要使用的坐标系相对于窗口小部件的左上角,但您显然使用了一个相对于窗口小部件父级的相对坐标系.(小部件的x和y坐标是相对于它们的父级).所以你的线将被削减.
此外,当您使用QWidget*参数构造它时,不必调用QPainter :: begin和QPainter :: end.并且代码中的画家也不会被删除.没有必要在堆上创建一个画家new:我只是在堆栈上创建它.
尝试:
void myProg::paintEvent(QPaintEvent *pe)
{
QProgressBar::paintEvent(pe);
QRect region = pe->rect();
QPainter painter(this);
QPen pen(Qt::red); //Note: set line colour like this
//(Brush line removed; not necessary when drawing a line)
int x = 0; //Note changed
int y = height() / 2; //Note changed
pen.setWidth(10);
painter.setPen(pen);
painter.drawLine(x,y,x+100,y);
}
这应该从小部件的中间左侧开始绘制一条100像素长的红色水平线.