SyntaxHighlighter

ラベル Qt(キュート)/ウィジェット の投稿を表示しています。 すべての投稿を表示
ラベル Qt(キュート)/ウィジェット の投稿を表示しています。 すべての投稿を表示

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)メインクラスにイベントスロットを追加して完了!


2013年4月8日月曜日

【Qt】ウィジェット操作(QTableWidget)

Qt TableWidget (キュート テーブルウィジェット)



// メイン
MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

// ラベル1のlineEditに文字を表示する。
ui->lineEdit->setText(“TEST”);

//——————————
//ボタンイベント登録
//——————————
QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(clickPshBtn()));

//——————————
//テーブル生成
//——————————
QTableWidget* tblWdgt;
tblWdgt = ui->tableWidget;

// クリア
tblWdgt->clear();

// テーブルの列数、行数を設定する
tblWdgt->setColumnCount( D_MAX_COL );
tblWdgt->setRowCount( D_MAX_ROW );

// 列のタイトル設定
tblWdgt->setHorizontalHeaderLabels(
 QStringList()
  << tr(“Title 1″)
  << tr(“Title 2″ )
  << tr(“Title 3″ )
  << tr(“Title 4″ )
  << tr(“Title 5″) );

//——————————
//テーブルプロパティ設定
//——————————
//セル選択不可にする場合
tblWdgt->setSelectionMode(QAbstractItemView::NoSelection);

//いわゆるExcelみたいなタイプ。Ctrl+クリックで飛び地の選択も可能。
tblWdgt->setSelectionMode(QAbstractItemView::ExtendedSelection);

//ダブルクリックでの編集不可にする
tblWdgt->setEditTriggers(QAbstractItemView::NoEditTriggers);

//カラム[0]の列幅設定
tblWdgt->setColumnWidth(COL_1,100);

// 選択したセルの色をデフォルトのグレーから変更する
// 親のカラーパレットを取得し変更する
//Qt::red, Qt::blue, Qt::green, Qt::yellow, Qt::magenta, Qt::cyan
QPalette palette = tblWdgt->palette();
palette.setColor(QPalette::Highlight, Qt::red);//現在選択されている項目の背景色
palette.setColor(QPalette::HighlightedText,Qt::green);//現在選択されている項目の文字色
tblWdgt->setPalette(palette);
}

//追加ボタンイベント
void MainWindow::clickPshBtn()

{
QTableWidget* tblWdgt = ui->tableWidget;
//最大行数の場合、先頭行の削除
if(m_row >= D_MAX_ROW){

tblWdgt->removeRow(0);
m_row–;

//最終行追加
tblWdgt->insertRow(m_row);

}
//データを追加する
count++;
QTableWidgetItem *item[COL_MAX];
item[COL_1] = new QTableWidgetItem(QString(“data1 #%8.0f”).arg(0.1));
item[COL_2] = new QTableWidgetItem(QString(“data2 #%1″).arg(count));
item[COL_3] = new QTableWidgetItem(QString(“data3 #%1″).arg(count));
item[COL_4] = new QTableWidgetItem(QString(“data4 #%1″).arg(count));
item[COL_5] = new QTableWidgetItem(QString(“data5 #%1″).arg(count));
for(int ncol=0;ncol<COL_MAX;ncol++){ tblWdgt->setItem(m_row, ncol, item[ncol]);}

// 指定したアイテム(行)までスクロール(列は未指定)
QTableWidgetItem *pItem = tblWdgt->item( m_row, 0 );
tblWdgt->scrollToItem( pItem );

//行インクリメント
m_row++;

}