既存のウィジェットから派生クラスを作成してカスタムウィジェットを作成する
※QwtScaleDrawでの記録を残す予定だったけど、折角なので違うものを作ってみました。
【サンプル】16進数スピンボックス
←カスタムウィジェット
←上記の値を10進数で表示するエディット
1)既存クラスを派生して任意の派生クラスを生成
※例に16進数のスピンボックスを使用
----------------------------------------------------------
#ifndef HEXSPINBOX_H
#define HEXSPINBOX_H
#include <QtGui>
#include <QSpinBox>
class QRegExpValidator;
// 16進数スピンボックスクラス
class HexSpinBox : public QSpinBox
{
Q_OBJECT
private:
// バリデータ
QRegExpValidator *valiDator;
public:
//コンストラクタ
HexSpinBox(QWidget *parent = 0)
:QSpinBox(parent)
{
// データ範囲設定
setRange(0,0x7FFF);
// バリデータ設定
valiDator = new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,8}"),this);
}
protected:
// バリデータマッチング確認
QValidator::State validate(QString &val, int &pos) const
{
return valiDator->validate(val,pos);
}
// 文字列から整数に変換
int valueFromText(const QString &val) const
{
//bool bRet;
//return val.toInt(bRet,16);
// 変換結果は未使用で0を返すためNULL
return val.toInt(NULL,16);
}
// 整数を16進数文字列に変換(英小文字を英大文字にする)
QString textFromValue(int val) const
{
return QString::number(val,16).toUpper();
}
};
#endif // HEXSPINBOX_H
----------------------------------------------------------
2)GUIフォーマットにSpinBoxウィジェットを追加して格上げする
①追加したクラス名
②追加ボタン押下
③追加された事を確認
④格上げボタン押下
※グローバルにする必要は特にないのでそのまま。
3)メインクラスにイベントスロットを追加して完了!
0 件のコメント:
コメントを投稿