QT关于tablewidget的自定义代理,加入自定义组合控件(qlineedit+qcombobox)
来源:互联网 发布:阿里云服务器装虚拟机 编辑:程序博客网 时间:2024/06/08 04:26
自定义代理
#ifndef DELEGATE_H
#define DELEGATE_H
#include <QObject>
#include <QWidget>
#include <QStyledItemDelegate>
#include <QItemDelegate>
#include <QModelIndex>
#include <QPainter>
#include"ScanData/inputagedlg.h"
#include"ui_inputagedlg.h"
#define AGECOLUM 13
class Delegate : public QItemDelegate
{
Q_OBJECT
public:
Delegate(QObject *parent = nullptr);
~Delegate();
void paint(QPainter *painter, const QStyleOptionViewItem &option,const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
private:
};
#endif// DELEGATE_H
#include "delegate.h"
#include<QComboBox>
#include<QLineEdit>
# pragma execution_character_set("utf-8")
Delegate::Delegate(QObject *parent): QItemDelegate(parent)
{
}
Delegate::~Delegate()
{
}
void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option,const QModelIndex &index) const
{
QItemDelegate::paint(painter, option, index);
}
QSize Delegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
return QItemDelegate::sizeHint(option, index);
}
QWidget *Delegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (index.isValid() && index.column() == AGECOLUM)
{
InputAgeDlg *editor=new InputAgeDlg(parent);
editor->installEventFilter(const_cast<Delegate *>(this));
return editor;
}
else
{
return QItemDelegate::createEditor(parent, option, index);
}
}
void Delegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
if (index.isValid() && index.column() == AGECOLUM)
{
QString value = index.model()->data(index, Qt::DisplayRole).toString();
InputAgeDlg *inputdge = qobject_cast<InputAgeDlg *>(editor);
if(!value.isEmpty())
{
if(value.contains(tr("岁")))
{
inputdge->set_age_uint(tr("岁"));
inputdge->set_Age(value.remove(tr("岁")));
}
if(value.contains(tr("月")))
{
inputdge->set_age_uint(tr("月"));
inputdge->set_Age(value.remove(tr("月")));
}
if(value.contains(tr("天")))
{
inputdge->set_age_uint(tr("天"));
inputdge->set_Age(value.remove(tr("天")));
}
if(value.contains(tr("小时")))
{
inputdge->set_age_uint(tr("小时"));
inputdge->set_Age(value.remove(tr("小时")));
}
}
}
else
{
QItemDelegate::setEditorData(editor, index);
}
}
void Delegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
if (index.isValid() && index.column() == AGECOLUM)
{
InputAgeDlg *inputdge = qobject_cast<InputAgeDlg *>(editor);
if(inputdge->age.isEmpty()||inputdge->age==" ")
model->setData(index, "");
else
model->setData(index, inputdge->age+inputdge->age_uint);
}
else
{
QItemDelegate::setModelData(editor, model, index);
}
}
自定义控件
#ifndef INPUTAGEDLG_H
#define INPUTAGEDLG_H
#include <QDialog>
namespace Ui {
class InputAgeDlg;
}
class InputAgeDlg : public QWidget
{
Q_OBJECT
public:
explicit InputAgeDlg(QWidget *parent = 0);
~InputAgeDlg();
QString getage();
QString getage_unit();
void set_Age(const QString& a);
void set_age_uint(const QString &u);
public:
Ui::InputAgeDlg *ui;
QString age;
QString age_uint;
private slots:
void on_ageedit_editingFinished();
void on_ageunitbox_currentIndexChanged(const QString &arg1);
};
#endif // INPUTAGEDLG_H
#include "inputagedlg.h"
#include "ui_inputagedlg.h"
# pragma execution_character_set("utf-8")
InputAgeDlg::InputAgeDlg(QWidget *parent) :
QWidget(parent),
ui(new Ui::InputAgeDlg)
{
ui->setupUi(this);
QStringList age_unit={tr("岁"),tr("月"),tr("天"),tr("小时")};
ui->ageunitbox->addItems(age_unit);
ui->ageedit->setValidator(new QRegExpValidator(QRegExp("[0-9.]+$"))); //只能输入数字
}
InputAgeDlg::~InputAgeDlg()
{
delete ui;
}
QString InputAgeDlg::getage()
{
return ui->ageedit->text();
}
QString InputAgeDlg::getage_unit()
{
return ui->ageunitbox->currentText();
}
void InputAgeDlg::set_Age(const QString &a)
{
ui->ageedit->setText(a);
}
void InputAgeDlg::set_age_uint(const QString &u)
{
ui->ageunitbox->setCurrentText(u);
}
void InputAgeDlg::on_ageedit_editingFinished()
{
age=ui->ageedit->text();
age_uint=ui->ageunitbox->currentText();
}
void InputAgeDlg::on_ageunitbox_currentIndexChanged(const QString &arg1)
{
age=ui->ageedit->text();
age_uint=arg1;
}
阅读全文
0 0
- QT关于tablewidget的自定义代理,加入自定义组合控件(qlineedit+qcombobox)
- QT 获得tableWidget中QComboBox的内容
- QT 获得tableWidget中QComboBox的内容
- Qt QComboBox自定义的下拉框
- 关于QT自定义控件
- QComboBox组合框 自定义样式 item的高度
- Qt - 自定义QComboBox下拉框的item高度
- 关于自定义组合控件以及自定义view
- QComboBox的代理(订制QComboBox组合框)
- QT - qss(二)组合框QComboBox的定制
- 自定义控件--自定义组合控件(RelativeLayout的组合控件)
- Qt TableWidget控件使用
- 自定义组合控件的写法(基础)
- qt QLineEdit 左侧带自定义图标类
- 简单的自定义组合控件 自定义属性
- 自定义组合控件的方法
- 自定义组合控件的过程
- 自定义组合控件的过程
- numpy 学习
- C# FileSystemWatcher 在监控文件夹和文件时的用法概述
- [巨坑]那些年没有填的坑qwq
- [ 线段树 ] BZOJ3276
- 排序实训
- QT关于tablewidget的自定义代理,加入自定义组合控件(qlineedit+qcombobox)
- 稠密重建CMVS在Windows下的使用
- python包xgboost安装和简单使用
- 【头条】从移动计算当道 看高通“高举高打”背后的势能
- BZOJ[2565]最长双回文串 Manacher
- 这些细节没注意,别怪Jetson开发板出问题NV不给修哟!
- NLP大神推荐的机器学习入门书单(附大量百度网盘电子书)
- hdu 2675 Equation Again (二分)
- 1057. 数零壹(20)