我QTimeEdit
显示hh:mm
。
此小部件行为非常烦人:当值为09:59
时,没有简单的方法可以移至10:00
。右侧的旋转框控件仅适用于分钟或小时。当您将光标放在分钟上时,如果值为59
,则不允许递增。
要从09:59
移至10:00
,您需要将59
递减至00
,然后将09
增加至10
... #39;真的很烦人。
没有选项可以让用户使用spinbox控件逐个递增分钟,然后只需单击一下就可以将值从09:59
更改为10:00
吗?
答案 0 :(得分:1)
将wrapping设为true
。
至于小时部分的自动更改,在 QTimeEdit 的子类中重新实现stepBy
,如下所示:
<强> MyTimeEdit.h 强>
#ifndef MYTIMEEDIT_H
#define MYTIMEEDIT_H
#include <QTimeEdit>
class MyTimeEdit : public QTimeEdit
{
Q_OBJECT
public:
explicit MyTimeEdit(QWidget *parent = nullptr);
void stepBy(int steps) override;
};
#endif // MYTIMEEDIT_H
<强> MyTimeEdit.cpp 强>
#include "MyTimeEdit.h"
MyTimeEdit::MyTimeEdit(QWidget *parent) : QTimeEdit(parent)
{
setWrapping(true);
}
void MyTimeEdit::stepBy(int steps)
{
QTime cur = time();
QTimeEdit::stepBy(steps);
if (currentSection() == QDateTimeEdit::MinuteSection) {
int m = cur.minute();
if ((m == 0) && (steps < 0))
setTime(time().addSecs(-3600));
else if ((m == 59) && (steps > 0))
setTime(time().addSecs(3600));
}
else if (currentSection() == QDateTimeEdit::SecondSection) {
int s = cur.second();
if ((s == 0) && (steps < 0))
setTime(time().addSecs(-60));
else if ((s == 59) && (steps > 0))
setTime(time().addSecs(60));
}
}
答案 1 :(得分:0)
我注意到,使用鼠标滚轮或Page Up / Page Down而不是箭头键时,以上答案无效,因为该步长大于1(在我的情况下为10)。
这是MyTimeEdit.cpp的一个版本,也可以使用鼠标滚轮和Page Up / Down键:
MyTimeEdit.cpp
#include "MyTimeEdit.h"
MyTimeEdit::MyTimeEdit(QWidget *parent) : QTimeEdit(parent)
{
setWrapping(true);
}
void MyTimeEdit::stepBy(int steps)
{
if (currentSection() == QDateTimeEdit::MinuteSection) {
setTime(time().addSecs(steps*60));
}
else if (currentSection() == QDateTimeEdit::SecondSection) {
setTime(time().addSecs(steps));
}
}