1.构造函数:
Progress::Progress(QWidget*parent) : QWidget{parent} { //setMouseTracking是一个 Qt 框架中的功能,用于启用或禁用鼠标跟踪。当该功能启用时,窗口将会跟踪鼠标的移动,并发送相应的鼠标事件。这样可以实现一些与鼠标相关的交互操作,如鼠标悬停、拖拽等。//在使用时,需要先获取一个 QWidget 对象的指针,然后调用其setMouseTracking方法来设置鼠标跟踪的状态。例如://Widget *widget = new QWidget;//widget->setMouseTracking(true); // 启用鼠标跟踪// 或者禁用鼠标跟踪// widget->setMouseTracking(false);//通过设置setMouseTracking(true)来启用鼠标跟踪,设置setMouseTracking(false)来禁用鼠标跟踪。启用后,当鼠标在该窗口内移动时,窗口将会收到鼠标移动事件,从而可以做出相应的处理。//需要注意的是,setMouseTracking只能用于 QWidget 及其派生类的对象,不能直接用于其他对象。this->setMouseTracking(true); }
作用:为了开启鼠标追踪效果
2.重绘函数
voidProgress::paintEvent(QPaintEvent*) { intwidth=this->width() -2*MY_BORDER_WIDTH; intheight=this->height(); QPainterpainter(this); //setRenderHint 是一个用于设置绘图选项的函数。它可以用来改变绘图的外观和性能。//该函数接受两个参数,第一个参数是一个 QPainte n::RenderHint 类型的枚举值,//表示要设置的绘图选项。第二个参数是一个布尔值,表示该选项是否启用。//启用抗锯齿渲染painter.setRenderHint(QPainter::Antialiasing); //Qt::NoPen是Qt框架中的一个枚举值,它用于指定不使用画笔绘制图形元素。//在绘制图形时,可以使用不同的画笔样式来定义边框线条的样式,包括颜色、宽度和样式等。//当设置为Qt::NoPen时,表示不使用任何画笔,即没有边框线条。//这个枚举值常用于需要绘制无边框的图形元素,//比如绘制填充区域或者背景色等。//通过将画笔设置为Qt::NoPen,可以让图形元素只显示填充效果,而没有边框线条。//在使用Qt进行图形绘制时,可以通过QPainter类的setPen()方法来设置画笔,//其中可以传入Qt::NoPen来指定不使用画笔。painter.setPen(Qt::NoPen); painter.setBrush(QColor(255,0,0)); painter.drawRect(MY_BORDER_WIDTH, 0, width, height); if (sliderLength<=0) return; painter.setBrush(QColor(255, 165, 50)); painter.drawRect(MY_BORDER_WIDTH, 0, width*sliderValue/sliderLength, height); }
3.鼠标事件
voidProgress::dealPos(intpos) { //如果长度小于0if (sliderLength<=0) return; //宽度intwidth=this->width() -2*MY_BORDER_WIDTH; if (pos<MY_BORDER_WIDTH) pos=MY_BORDER_WIDTH; if (pos>width+MY_BORDER_WIDTH) pos=width+MY_BORDER_WIDTH; //分段doublestep= (double)width/sliderLength; //值doublevalue= (double)(pos-MY_BORDER_WIDTH) /step; doubleoffset=value-int(value); intrealValue=int(value); if (offset-0.5>=0) realValue++; if (sliderValue!=realValue) { sliderValue=realValue; emitsignalValue(realValue); this->update(); } }
4.其他函数
//设置长度voidProgress::setSliderLength(intvalue) { sliderLength=value; } voidProgress::setSliderValue(intvalue) { //如果不按下if (!pressFlag) { sliderValue=value; //QWidget的update()函数是用来更新窗口的显示。//当调用update()函数时,会触发窗口的重绘事件,使窗口进行重新绘制。//这个函数通常用于在程序运行过程中需要更新窗口内容时调用,//比如改变窗口的大小、位置、背景色等。调用update()函数后,//系统会自动调用QWidget的paintEvent()函数进行窗口的重新绘制。this->update(); } } intProgress::getSliderValue() { returnsliderValue; } //是否按下boolProgress::getPressFlag() { returnpressFlag; }