#include "commondelegate.h"
#include <QSpinBox>
#include <QLineEdit>
#include <QComboBox>
#include <QIntValidator>
class CusDoubleValidator : public QDoubleValidator
{
public:
explicit CusDoubleValidator(QObject * parent = 0)
:QDoubleValidator(parent){
}
State validate(QString &str, int &i) const{
Q_UNUSED(i);
if (str.isEmpty()){
return QValidator::Intermediate;
}
bool cOK = false;
double val = str.toDouble(&cOK);
if (!cOK){
return QValidator::Invalid;
}
int dotPos = str.indexOf(".");
if (dotPos > 0){
if (str.right(str.length() - dotPos - 1).length() > decimals()){
return QValidator::Invalid;
}
}
if (val <= top() && val >= bottom()){
return QValidator::Acceptable;
}
return QValidator::Invalid;
}
};
//ComboboxDelegate
ComboboxDelegate::ComboboxDelegate(QObject *parent)
: QStyledItemDelegate(parent)
{
}
QWidget *ComboboxDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/* option */,
const QModelIndex &/* index */) const
{
QComboBox* editor = new QComboBox(parent);
editor->addItem(QString::fromLocal8Bit("雨田哥1号"));
editor->addItem(QString::fromLocal8Bit("雨田哥2号"));
editor->addItem(QString::fromLocal8Bit("雨田哥3号"));
editor->setCurrentIndex(0);
return editor;
}
void ComboboxDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
QString value = index.model()->data(index, Qt::EditRole).toString();
QComboBox *combobox = static_cast<QComboBox*>(editor);
combobox->setCurrentText(value);
}
void ComboboxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QComboBox *combobox = static_cast<QComboBox*>(editor);
QString value = combobox->currentText();
model->setData(index, value, Qt::EditRole);
}
void ComboboxDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
editor->setGeometry(option.rect);
}
void ComboboxDelegate::paint(QPainter* painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem itemOptin(option);
if (itemOptin.state & QStyle::State_HasFocus)
itemOptin.state = itemOptin.state ^ QStyle::State_HasFocus;
return QStyledItemDelegate::paint(painter, itemOptin, index);
};
//SpinBoxDelegate
SpinBoxDelegate::SpinBoxDelegate(QObject *parent)
: QStyledItemDelegate(parent)
{
}
QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/* option */,
const QModelIndex &/* index */) const
{
QSpinBox *editor = new QSpinBox(parent);
editor->setFrame(false);
editor->setMinimum(0);
editor->setMaximum(100);
return editor;
}
void SpinBoxDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
int value = index.model()->data(index, Qt::EditRole).toInt();
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->setValue(value);
}
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->interpretText();
int value = spinBox->value();
model->setData(index, value, Qt::EditRole);
}
void SpinBoxDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
editor->setGeometry(option.rect);
}
void SpinBoxDelegate::paint(QPainter* painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem itemOptin(option);
if (itemOptin.state & QStyle::State_HasFocus)
itemOptin.state = itemOptin.state ^ QStyle::State_HasFocus;
return QStyledItemDelegate::paint(painter, itemOptin, index);
};
//LineEditDelegate
LineEditDelegate::LineEditDelegate(QObject *parent)
: QStyledItemDelegate(parent)
, m_limitString(-1)
, m_placeTxt("")
, m_decilas(2)
{
m_limitIntRange = std::make_pair(-1, -1);
m_limitFloatRange = std::make_pair(-1, -1);
}
QWidget *LineEditDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/* option */,
const QModelIndex &/* index */) const
{
QLineEdit *editor = new QLineEdit(parent);
editor->setStyleSheet("QLineEdit{border: 1px solid #DDDDDD;color:#666666;font-size:12px;}");
if (!m_placeTxt.isEmpty())
editor->setPlaceholderText(m_placeTxt);
QValidator *validator = nullptr;
if (m_limitIntRange.first != -1){
validator = new QIntValidator(m_limitIntRange.first, m_limitIntRange.second, editor);
editor->setValidator(validator);
}
else if (m_limitFloatRange.first != -1){
CusDoubleValidator* validator0 = new CusDoubleValidator(editor);
validator0->setRange(m_limitFloatRange.first, m_limitFloatRange.second, m_decilas);
editor->setValidator(validator0);
}
if (m_limitString != -1){
editor->setMaxLength(m_limitString);
}
return editor;
}
void LineEditDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
QString value = index.model()->data(index, Qt::EditRole).toString();
QLineEdit *linedit = static_cast<QLineEdit*>(editor);
linedit->setText(value);
}
void LineEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QLineEdit *linedit = static_cast<QLineEdit*>(editor);
QString value = linedit->text();
model->setData(index, value, Qt::EditRole);
}
void LineEditDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
editor->setGeometry(option.rect);
}
void LineEditDelegate::paint(QPainter* painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem itemOptin(option);
if (itemOptin.state & QStyle::State_HasFocus)
itemOptin.state = itemOptin.state ^ QStyle::State_HasFocus;
return QStyledItemDelegate::paint(painter, itemOptin, index);
};
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论

















收起资源包目录































共 27 条
- 1
资源评论


唯一色彩CDF
- 粉丝: 2
- 资源: 12
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
