#include "table_view.h"
#include<QApplication>
#include<QProgressBar>
#include<QComboBox>
#include<QStringListModel>
#include<QStringList>
#include<QLabel>
#include <QPainter>
#include <QMouseEvent>
#include <QStyledItemDelegate>
#include <QToolTip>
#include <QApplication>
table_view::table_view()
{
}
/********************TableViewDelegate********************/
TableDelegate::TableDelegate(QObject *parent)
: QStyledItemDelegate(parent)
{
}
QWidget *TableDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem & option ,
const QModelIndex & index ) const
{
if(index.column()==1){
QComboBox *combobox = new QComboBox(parent);
combobox->addItem("AAA");
combobox->addItem("BBB");
combobox->addItem("CCC");
return combobox;
}
else{
QLabel *LB = new QLabel(parent);
return QStyledItemDelegate::createEditor(LB,option,index);
}
}
//将Model中数据赋值到控件上
void TableDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
QString value = index.model()->data(index, Qt::EditRole).toString();
if(index.column()==1){
QComboBox *spinBox = static_cast<QComboBox*>(editor);
// spinBox->setValue(value);
spinBox->addItem(value);
}
else{
return QStyledItemDelegate::setEditorData(editor,index);
}
//qDebug()<<value;
}
//设定模型数据,根据指定项中对应编辑控件的数据
void TableDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
if(index.column()==1){
QComboBox *combobox = static_cast<QComboBox*>(editor);
//spinBox->currentIndex();
QString value = combobox->currentText();
model->setData(index, value, Qt::EditRole);
//qDebug()<<value +"~";
}
else{
QStyledItemDelegate::setModelData(editor,model,index);
}
}
void TableDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
editor->setGeometry(option.rect);
}
/********************TreeWidgetDelegate********************/
TreeWidgetItemDelegate::TreeWidgetItemDelegate(QObject * parent)
: QStyledItemDelegate(parent),
m_treeView(NULL),
m_pixmapHeight(9),
m_pixmapWidth(9)
{
m_expandIconName = ":/new/prefix1/image/arrowBottom.png";//QCoreApplication::applicationDirPath() + "/Resources/Images/arrowBottom.png";
m_collapseIconName = ":/new/prefix1/image/arrowTop.png";//QCoreApplication::applicationDirPath() + "/Resources/Images/arrowTop.png";
}
void TreeWidgetItemDelegate::setIconSize(QSize size)
{
m_pixmapHeight = size.height();
m_pixmapWidth = size.width();
}
void TreeWidgetItemDelegate::setExpandIcon(QString expandIconName)
{
m_expandIconName = expandIconName;
}
void TreeWidgetItemDelegate::setcollapseIcon(QString collapseIconName)
{
m_collapseIconName = collapseIconName;
}
void TreeWidgetItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem viewOption(option);
if (viewOption.state & QStyle::State_HasFocus)
{
viewOption.state = viewOption.state ^ QStyle::State_HasFocus;
}
QStyledItemDelegate::paint(painter, viewOption, index);
bool bExpanded = false;
if (m_treeView != NULL)
{
const QAbstractItemModel *model = index.model();
if (!model->hasChildren(index))
{
return;
}
bExpanded = m_treeView->isExpanded(index);
}
int height = (viewOption.rect.height() - m_pixmapWidth) / 2;
QPixmap pixmap = bExpanded ? QPixmap(m_expandIconName) : QPixmap(m_collapseIconName);
QRect decorationRect = QRect(viewOption.rect.left() + viewOption.rect.width() - 30, viewOption.rect.top() + height, m_pixmapHeight, m_pixmapWidth);
painter->drawPixmap(decorationRect, pixmap);
}
bool TreeWidgetItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
int height = (option.rect.height() - m_pixmapWidth) / 2;
QRect decorationRect = QRect(option.rect.left() + option.rect.width() - 30, option.rect.top() + height, m_pixmapHeight, m_pixmapWidth);
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if (event->type() == QEvent::MouseButtonPress && decorationRect.contains(mouseEvent->pos()))
{
emit expanded(index);
}
if (event->type() == QEvent::MouseMove && decorationRect.contains(mouseEvent->pos()))
{
bool bExpanded = false;
if (m_treeView != NULL)
{
const QAbstractItemModel *model = index.model();
if (!model->hasChildren(index))
{
return false;
}
bExpanded = m_treeView->isExpanded(index);
}
QCursor cursor(Qt::PointingHandCursor);
QApplication::setOverrideCursor(cursor);
QString strText = bExpanded ? QStringLiteral("unfold") : QStringLiteral("expand");
QToolTip::showText(mouseEvent->globalPos(), strText);
}
else
{
QCursor cursor(Qt::ArrowCursor);
QApplication::setOverrideCursor(cursor);
}
return QStyledItemDelegate::editorEvent(event, model, option, index);
}
void TreeWidgetItemDelegate::setView(QTreeView *treeView)
{
m_treeView = treeView;
}
/********************TableModel********************/
TableModel::TableModel(QObject *parent)
: QAbstractTableModel(parent), arr_row_list(NULL)
{
}
TableModel::~TableModel(void)
{
arr_row_list = NULL;
}
void TableModel::setHorizontalHeaderList(QStringList horizontalHeaderList)
{
horizontal_header_list = horizontalHeaderList;
}
void TableModel::setVerticalHeaderList(QStringList verticalHeaderList)
{
vertical_header_list = verticalHeaderList;
}
int TableModel::rowCount(const QModelIndex &parent) const
{
if(vertical_header_list.size() > 0)
return vertical_header_list.size();
if(NULL == arr_row_list)
return 0;
else
return arr_row_list->size();
}
int TableModel::columnCount(const QModelIndex &parent) const
{
if(horizontal_header_list.size() > 0)
return horizontal_header_list.size();
if(NULL == arr_row_list)
return 0;
else if(arr_row_list->size() < 1)
return 0;
else
return arr_row_list->at(0).size();
}
QVariant TableModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if(NULL == arr_row_list)
return QVariant();
if(arr_row_list->size() < 1)
return QVariant();
if (role == Qt::TextAlignmentRole)
{
return int(Qt::AlignLeft | Qt::AlignVCenter);
}
else if (role == Qt::DisplayRole)
{
if(index.row() >= arr_row_list->size())
return QVariant();
if(index.column() >= arr_row_list->at(0).size())
return QVariant();
return arr_row_list->at(index.row()).at(index.column());
}
return QVariant();
}
QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if(role==Qt::DisplayRole)
{
if(orientation==Qt::Horizontal) // 水平表头
{
if(horizontal_header_list.size() > section)
return horizontal_header_list[section];
else
return QVariant();
}
else
{
if(vertical_header_list.size() > section)
return vertical_header_list[section]; // 垂直表头
else
retu
清风随我览江山
- 粉丝: 30
- 资源: 18
会员权益专享
最新资源
- Quick自定义键盘程序
- video.js最新版-进度条缩略图-雪碧图
- 【计算机专业Java-毕业设计100套之】java手机游戏(堡垒)的设计与开发(源代码+论文)
- 【计算机专业Java-毕业设计100套之】JAVA贪吃蛇游戏毕业设计(源代码+论文)
- secureCRT.zip-远程连接工具
- Stepper步进器相当于UIKit中的UIStepper,用于实现数据的递增和递减
- 【计算机专业Java-毕业设计100套之】JAVA局域网飞鸽传书软件设计与实现(源代码+论文)
- 全国2022年04月自考00135《农业经济与管理》试题
- 全国2022年04月自考00102《世界市场行情》试题
- 全国2022年04月自考00100《国际运输与保险》试题
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


