ユーザーがタスクを作成して休憩を追加できる日記プログラムがあります。各Task
オブジェクトにはQTime start_time
とがありQTime end_time
ます。のように、それぞれにとのメンバーがあります。カスタムを使用して「タイムライン」を表示することで、現在のタスクの進行状況を視覚化したいと考えています。これは、休憩を表す赤いチャンクで区切られた緑の線と、現在の進行状況を示すその上の三角形である必要があります。これが私の最高品質の図面です。vector
Break
Break
QTime start_time
QTime end_time
Task
QProgressBar
必要条件: 三角形は、約 1 分ごとに端に向かってスムーズに移動し、ホップしない必要があります。また、赤のチャンクまたは緑のチャンクに応じて、色を変更する必要があります。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)));
}