#include <QSpinBox>
#include <QComboBox>
#include <QDockWidget>
#include <QMainWindow>
#include <QHeaderView>
#include "deviceconfig.h"
/*
参数: 调节范围:
耦合长度:0~5m
端头切除:0~100m
观察长度:2~100m
检测管径:10~1000mm
激励场强:低/中/高
硬件增益:0~48DB
脉宽设定:0.1~1.0
垂直放大:0.1~10.0
采样次数:1~10
底波抑制:开/关
清屏延迟:100~500MS
*/
enum TableRowEnum
{
OUHE = 0,
DUANTOU,
CHANGDU,
GUANGJING,
CHANGQIANG,
ZENGYI,
MAIKUAN,
CUIZHI,
CAIYANG,
DIBO,
QINGPING
};
#define DEVICE_CONFIG_ROW 11
QWidget* DeviceTableDelegate::_createEditor(QWidget *parent, const QModelIndex &index)const
{
if(1 != index.column())
return nullptr;
int row = index.row();
QWidget* retWidget = nullptr;
switch(row)
{
case OUHE:
retWidget = new QSpinBox(parent); //创建一个QSpinBox
static_cast<QSpinBox*>(retWidget)->setFrame(false); //设置为无边框
static_cast<QSpinBox*>(retWidget)->setMinimum(0);
static_cast<QSpinBox*>(retWidget)->setMaximum(5);
break;
case DUANTOU:
retWidget = new QSpinBox(parent); //创建一个QSpinBox
static_cast<QSpinBox*>(retWidget)->setFrame(false); //设置为无边框
static_cast<QSpinBox*>(retWidget)->setMinimum(0);
static_cast<QSpinBox*>(retWidget)->setMaximum(100);
break;
case CHANGDU:
retWidget = new QSpinBox(parent); //创建一个QSpinBox
static_cast<QSpinBox*>(retWidget)->setFrame(false); //设置为无边框
static_cast<QSpinBox*>(retWidget)->setMinimum(2);
static_cast<QSpinBox*>(retWidget)->setMaximum(100);
break;
case GUANGJING:
retWidget = new QSpinBox(parent); //创建一个QSpinBox
static_cast<QSpinBox*>(retWidget)->setFrame(false); //设置为无边框
static_cast<QSpinBox*>(retWidget)->setMinimum(10);
static_cast<QSpinBox*>(retWidget)->setMaximum(100);
break;
case CHANGQIANG:
retWidget = new QComboBox(parent);
static_cast<QComboBox*>(retWidget)->addItem("低");
static_cast<QComboBox*>(retWidget)->addItem("中");
static_cast<QComboBox*>(retWidget)->addItem("强");
break;
case ZENGYI:
retWidget = new QSpinBox(parent); //创建一个QSpinBox
static_cast<QSpinBox*>(retWidget)->setFrame(false); //设置为无边框
static_cast<QSpinBox*>(retWidget)->setMinimum(0);
static_cast<QSpinBox*>(retWidget)->setMaximum(48);
break;
case MAIKUAN:
retWidget = new QDoubleSpinBox(parent); //创建一个QSpinBox
static_cast<QDoubleSpinBox*>(retWidget)->setRange(0.1, 1.0); //设置范围
static_cast<QDoubleSpinBox*>(retWidget)->setSingleStep(0.1); //设置步长
static_cast<QDoubleSpinBox*>(retWidget)->setFrame(false); //设置为无边框
break;
case CUIZHI:
retWidget = new QDoubleSpinBox(parent); //创建一个QSpinBox
static_cast<QDoubleSpinBox*>(retWidget)->setRange(0.1, 10.0); //设置范围
static_cast<QDoubleSpinBox*>(retWidget)->setSingleStep(0.1); //设置步长
static_cast<QDoubleSpinBox*>(retWidget)->setFrame(false); //设置为无边框
break;
case CAIYANG:
retWidget = new QSpinBox(parent); //创建一个QSpinBox
static_cast<QSpinBox*>(retWidget)->setFrame(false); //设置为无边框
static_cast<QSpinBox*>(retWidget)->setMinimum(1);
static_cast<QSpinBox*>(retWidget)->setMaximum(10);
break;
case DIBO:
retWidget = new QComboBox(parent);
static_cast<QComboBox*>(retWidget)->addItem("开");
static_cast<QComboBox*>(retWidget)->addItem("关");
break;
case QINGPING:
retWidget = new QSpinBox(parent); //创建一个QSpinBox
static_cast<QSpinBox*>(retWidget)->setFrame(false); //设置为无边框
static_cast<QSpinBox*>(retWidget)->setMinimum(100);
static_cast<QSpinBox*>(retWidget)->setMaximum(500);
break;
default:
break;
}
return retWidget;
}
bool DeviceTableDelegate::_setEditorData(QWidget *editor,const QModelIndex &index)const
{
if(1 != index.column())
return false;
bool ret = false;
switch(index.row())
{
case OUHE:
case DUANTOU:
case CHANGDU:
case GUANGJING:
case ZENGYI:
case CAIYANG:
case QINGPING:
{
int value = index.model()->data(index,Qt::EditRole).toInt();
QSpinBox* spinBox = static_cast<QSpinBox*>(editor);
spinBox->setValue(value);
ret = true;
break;
}
case CHANGQIANG:
case DIBO:
{
QString string = index.model()->data(index,Qt::EditRole).toString();
QComboBox* comboBox = static_cast<QComboBox*>(editor);
int i =comboBox->findText(string);
comboBox->setCurrentIndex(i);
ret = true;
break;
}
case MAIKUAN:
case CUIZHI:
{
double value = index.model()->data(index,Qt::EditRole).toDouble();
QDoubleSpinBox* spinBox = static_cast<QDoubleSpinBox*>(editor);
spinBox->setValue(value);
ret = true;
break;
}
default:
break;
}
return ret;
}
bool DeviceTableDelegate::_setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index)const
{
if(!index.isValid() || 1 != index.column())
return false;
bool ret = false;
switch(index.row())
{
case OUHE:
case DUANTOU:
case CHANGDU:
case GUANGJING:
case ZENGYI:
case CAIYANG:
case QINGPING:
{
QSpinBox* spinBox = static_cast<QSpinBox*>(editor);
spinBox->interpretText();
int value = spinBox->value();
model->setData(index, value, Qt::EditRole);
ret = true;
break;
}
case CHANGQIANG:
case DIBO:
{
QComboBox* comboBox = static_cast<QComboBox*>(editor);
QString text = comboBox->currentText();
model->setData(index, text, Qt::EditRole);
ret = true;
break;
}
case MAIKUAN:
case CUIZHI:
{
QDoubleSpinBox* spinBox = static_cast<QDoubleSpinBox*>(editor);
double value = spinBox->value();
model->setData(index, value, Qt::EditRole);
ret = true;
break;
}
default:
break;
}
return ret;
}
DeviceTableDelegate::DeviceTableDelegate(QObject *parent)
:QStyledItemDelegate(parent)
{
}
QWidget *DeviceTableDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &option,
const QModelIndex &index)const
{
QWidget * pWidget = _createEditor(parent, index);
return (pWidget ? pWidget : QStyledItemDelegate::createEditor(parent,option,index));
}
void DeviceTableDelegate::setEditorData(QWidget *editor,const QModelIndex &index)const
{
if( !_setEditorData(editor, index) )
QStyledItemDelegate::setEditorData(editor,index);
}
void DeviceTableDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index)const
{
if( !_setModelData(editor, model, index) )
QStyledItemDelegate::setModelData(editor,model,index);
}
void DeviceTableDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option,
const QModelIndex &index)const
{
editor->setGeometry(option.rect);
}
void DeviceConfigTable::setupToMainWin()
{
//停靠窗口实现
QDockWidget *pDock = new QDockWidget("设备配置", m_MainWin);
pDock->setFeatures(QDockWidget::DockWidgetMovable);
pDock->setAllowedAreas(Qt::LeftDockWidgetAre