Qt Docsは、レンジコントロールをQLineEdits
にしたい場合、「バリデータと一緒にマスクを使用する」と明示していますが、これは簡単ではないようです。少なくとも他の人にも同様の問題があります。しかしmybeこのことができます:
サブクラスQLineEdit
と、次のようにfocusInEvent()
とsetValidator()
を上書き:
----------------- mylineedit.hを------ ----------------
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QLineEdit>
#include <QFocusEvent>
#include <QRegExpValidator>
class MyLineEdit : public QLineEdit
{
Q_OBJECT
private:
const QValidator *validator;
public:
MyLineEdit(QWidget *parent = 0);
void setValidator(const QValidator *v);
protected:
void focusInEvent(QFocusEvent *e);
};
#endif // MYLINEEDIT_H
------------------- mylineedit.cpp ----- --------------
#include "mylineedit.h"
MyLineEdit::MyLineEdit(QWidget *parent): QLineEdit(parent)
{
}
void MyLineEdit::setValidator(const QValidator *v)
{
validator = v;
QLineEdit::setValidator(v);
}
void MyLineEdit::focusInEvent(QFocusEvent *e)
{
Q_UNUSED(e);
clear();
setInputMask("");
setValidator(validator);
}
MyLineEdit
オブジェクトの場合は、 QRegExp
は、この時点でコロンを使用しないで12時間形式で時間を入力できるだけです:1152ユーザーが編集を終了すると、lineeditは、1152から11:52までを作成する"HH:HH"
という形式のInpuMaskを取得します。フォーカスがクリアされます。ユーザが再びラインディジットに焦点を合わせると、それはクリアされ、QRegExp
が再びセットされ、ユーザは新しい時間1245をエンゲージする。など...
--------------------- rootwindow.h ---------------- ----
#ifndef ROOTWINDOW_H
#define ROOTWINDOW_H
#include "mylineedit.h"
#include <QMainWindow>
#include <QWidget>
#include <QtDebug>
class RootWindow : public QMainWindow
{
Q_OBJECT
private:
QWidget *widgetCentral;
MyLineEdit *line;
public:
RootWindow(QWidget *parent = 0);
~RootWindow();
private slots:
void slotLineEdited();
};
#endif // ROOTWINDOW_H
-------------- rootwindow.cpp ----------------------
#include "rootwindow.h"
RootWindow::RootWindow(QWidget *parent): QMainWindow(parent)
{
setCentralWidget(widgetCentral = new QWidget);
line = new MyLineEdit(widgetCentral);
line->setValidator(new QRegExpValidator( QRegExp("[0][0-9][0-5][0-9]|[1][0-2][0-5][0-9]") ));
connect(line, SIGNAL(editingFinished()), this, SLOT(slotLineEdited()));
}
RootWindow::~RootWindow()
{
}
void RootWindow::slotLineEdited()
{
line->setInputMask("HH:HH");
line->clearFocus();
}
---------------------- main.cpp ------------------ --------
#include "rootwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
RootWindow w;
w.show();
return a.exec();
}
実際には少し上に見えますが実際はそれほど新しいコードではなく、キーボードにコロンキーは必要ありません。
'QTimeEdit'はどうしますか? – hank
@ hankいいえここでは使用できません。要件: –