SyntaxHighlighter

2013年4月25日木曜日

【Qt】カスタムウィジェットの追加

■カスタムウィジェットの追加方法(スピンボックス)

既存のウィジェットから派生クラスを作成してカスタムウィジェットを作成する
※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 &amp;val, int &amp;pos) const 
  { 
    return valiDator-&gt;validate(val,pos); 
  } 

  // 文字列から整数に変換 
  int valueFromText(const QString &amp;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 件のコメント:

コメントを投稿