3

ユーザーがタスクを作成して休憩を追加できる日記プログラムがあります。各TaskオブジェクトにはQTime start_timeとがありQTime end_timeます。のように、それぞれにとのメンバーがあります。カスタムを使用して「タイムライン」を表示することで、現在のタスクの進行状況を視覚化したいと考えています。これは、休憩を表す赤いチャンクで区切られた緑の線と、現在の進行状況を示すその上の三角形である必要があります。これが私の最高品質の図面です。vectorBreakBreakQTime start_timeQTime end_timeTaskQProgressBar
ここに画像の説明を入力

必要条件: 三角形は、約 1 分ごとに端に向かってスムーズに移動し、ホップしない必要があります。また、赤のチャンクまたは緑のチャンクに応じて、色を変更する必要があります。task行はサイズ変更可能である必要がありますが、それはs またはbreaks 時間変数に影響を与えるべきではありません。ユーザーは、結果として複数の休憩を追加することはできません。
今私の質問は、これは可能ですか? はいの場合、どのように?
緑の線と赤い塊のない三角形だけを描くために休憩なしのタスクを作成しようとしましたが、すぐにサイズ変更の問題に直面しました。線幅が増加すると、三角形の分単位の「ステップ」も増加するはずです。私はそれを実装しようとしましたが、あまり成功しませんでした。
コードは次のとおりです。

//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)));
}
4

1 に答える 1