我有一个日记程序,用户可以在其中创建任务,然后为它们添加休息时间。每个Task
对象都有一个QTime start_time
,QTime end_time
和s vector
。Break
每个Break
都有一个QTime start_time
和QTime end_time
成员,就像一个Task
。我想通过使用自定义QProgressBar
显示“时间线”来可视化当前任务的进度。它应该是一条绿线,由代表中断的红色块分隔,其上方的三角形表示当前进度。这是我的顶级画质:
要求:三角形每分钟左右要平稳地向终点移动,不要跳跃。它还必须根据它是在红色块上还是绿色上来改变它的颜色。该行必须可调整大小,但这不应影响task
s 或break
s 时间变量。用户不能添加多个中断和后续时间。
现在我的问题是,这甚至可能吗?如果是,那么如何?
我试图做一个没有中断的任务,只画一条绿线和一个没有红色块的三角形,但我立即遇到了调整大小的问题。如果线宽增加,那么三角形的“步长”也应该增加。我试图实现这一点,但没有取得太大的成功。
这是代码:
//class CustomProgressBar: public QProgressBar
void CustomProgressBar::paintEvent(QPaintEvent* event)
{
setMaximum(this->width());
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
QPoint start_point;
start_point.setX(0);
start_point.setY(13);
QPoint end_point;
end_point.setY(13);
end_point.setX(this->width()); //has to be resizable
//"TimeLine"
painter.setPen(QPen(Qt::green, 2, Qt::SolidLine, Qt::RoundCap));
painter.drawLine(start_point, end_point);
//Triangle
int progress = this->value();
QPoint triangle_start_point;
triangle_start_point.setX(this->value() + this->width() / 15 + 1);
triangle_start_point.setY(0);
QPoint triangle_bot_point;
triangle_bot_point.setX(this->value() + this->width() / 15 + 6);
triangle_bot_point.setY(10);
QPoint triangle_top_point;
triangle_top_point.setX(this->value() + this->width() / 15 + 11);
triangle_top_point.setY(0);
QPainterPath path;
path.moveTo(triangle_start_point);
path.lineTo(triangle_bot_point);
path.lineTo(triangle_top_point);
path.lineTo(triangle_start_point);
painter.setPen (Qt :: NoPen);
painter.fillPath(path, QBrush(QColor (Qt::green)));
}