用Qt实现给定开始时间和结束时间,画出时间轴
时间: 2023-11-14 13:11:19 浏览: 71
下面是一个用Qt实现画时间轴的示例代码,你可以根据自己的需求进行修改:
```cpp
#include <QtWidgets>
class TimeAxis : public QWidget
{
public:
TimeAxis(QTime start, QTime end, QWidget *parent = nullptr)
: QWidget(parent), m_start(start), m_end(end)
{
setMinimumHeight(50);
}
protected:
void paintEvent(QPaintEvent *event) override
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 计算每个小时对应的像素值
int hourWidth = width() / (m_end.hour() - m_start.hour() + 1);
// 画时间刻度
for (int i = m_start.hour(); i <= m_end.hour(); ++i) {
int x = (i - m_start.hour()) * hourWidth;
painter.drawLine(x, 0, x, height());
painter.drawText(x + hourWidth / 2, height() - 5, QString("%1:00").arg(i));
}
// 画开始和结束时间的标记
int startX = (m_start.hour() - m_start.hour()) * hourWidth;
int endX = (m_end.hour() - m_start.hour()) * hourWidth;
painter.setPen(QPen(Qt::red, 2));
painter.drawLine(startX, 0, startX, height());
painter.drawLine(endX, 0, endX, height());
}
private:
QTime m_start;
QTime m_end;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTime start(8, 0);
QTime end(18, 0);
TimeAxis timeAxis(start, end);
timeAxis.show();
return app.exec();
}
```
在上面的代码中,我们通过重写`paintEvent()`函数来画时间轴。我们首先计算每个小时对应的像素值,然后依次画出每个小时的刻度和时间标记,最后画出开始和结束时间的标记。
你可以根据自己的需求来修改时间轴的起始时间和结束时间,并且可以添加更多的功能来满足你的需求。
阅读全文