`
qimo601
  • 浏览: 3437342 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Qt-在表格(QTableView)中插入图片

    博客分类:
  • Qt
阅读更多


通过Qt的委托,可以实现自定义QTableView中每一项的特殊实现方式。

本例,利用Delegate  实现在QTableView中插入Pixmap图


 

 

 

[文件] main.cpp ~ 273B    下载(10)
/**
* @file main.cpp
* @brief  
* @author xiangxw
* @version 0.0
* @date 2011年月日
*/ 

#include<QApplication>
#include"MyTableView.h"


int main(int argc,char *argv[])
{
	QApplication app(argc,argv);

	MyTableView table;
	table.show();

	return app.exec();
}
 

 

 

[文件] MyTableView.h ~ 1KB    下载(10)
/**
* @file MyTableView.h
* @brief 
* @author xiangxw
* @version 0.0
* @date 2011年月日
*/

#ifndef MYTABLEVIEW_H
#define MYTABLEVIEW_H

#include<QTableView>
#include<QItemDelegate>
#include<QStandardItemModel>
#include<QPixmap>

class MyTableView;
class MyItemDelegate;
class MyStandardItemModel;

class MyTableView:public QTableView
{
public:
	MyTableView(QWidget * parent=0);
	virtual ~ MyTableView(){}

protected:
	void mouseMoveEvent(QMouseEvent * event);

private:
	MyItemDelegate * delegate;
	MyStandardItemModel * model;		
};

class MyItemDelegate:public QItemDelegate
{
public:
	MyItemDelegate(QObject * parent=0);
	virtual ~ MyItemDelegate(){}

	void paint(QPainter * painter,
		const QStyleOptionViewItem & option,
		const QModelIndex & index) const;
	bool editorEvent(QEvent * event,
		QAbstractItemModel * model,
		const QStyleOptionViewItem & option,
		const QModelIndex & index);
private:
	QPixmap favouritePixmap;
	QPixmap notFavouritePixmap; 
};
class MyStandardItemModel:public QStandardItemModel
{
public:
	MyStandardItemModel(QObject * parent=0)
		:QStandardItemModel(parent){}
	virtual ~ MyStandardItemModel(){}
	QVariant data(const QModelIndex & index,
		int role=Qt::DisplayRole) const;
	QVariant headerData(int section,
		Qt::Orientation orientation,
		int role=Qt::DisplayRole) const;
};
#endif
 

 

[文件] MyTableView.cpp ~ 3KB    下载(16)
/**
* @file MyTableView.cpp
* @brief  
* @author xiangxw
* @version 0.0
* @date 2011年月日
*/

#include<QPainter>
#include<QMouseEvent>
#include"MyTableView.h"

#ifndef NDEBUG
#include<QDebug>
#endif

MyTableView::MyTableView(QWidget * parent)
:QTableView(parent)
{
	delegate=new MyItemDelegate;
	model=new MyStandardItemModel;	
	model->setRowCount(6);
	model->setColumnCount(8);

	this->setModel(model);
	this->setItemDelegate(delegate);

	this->resizeColumnsToContents();
	this->resizeRowsToContents();
	this->setEditTriggers(QAbstractItemView::NoEditTriggers);
	this->setSelectionBehavior(QAbstractItemView::SelectRows);
	this->setMouseTracking(true);//important
}

void MyTableView::mouseMoveEvent(QMouseEvent * event)
{
	int column=this->columnAt(event->x());
	int row=this->rowAt(event->y());
	if(column==0 && row!=-1){
		this->setCursor(Qt::PointingHandCursor);
	}
	else{
		this->setCursor(Qt::ArrowCursor);
	}
}

MyItemDelegate::MyItemDelegate(QObject * parent)
:QItemDelegate(parent)
{
	favouritePixmap=QPixmap(":/favourite.png");
	notFavouritePixmap=QPixmap(":/no-favourite.png");
}

void MyItemDelegate::paint(QPainter * painter,
						   const QStyleOptionViewItem & option,
						   const QModelIndex & index) const
{
	if(index.column()!=0){
		QItemDelegate::paint(painter,option,index);
		return;
	}
	const QAbstractItemModel * model=index.model();
	QVariant var=model->data(index,Qt::CheckStateRole);
	if(var.isNull()) var=false;
	const QPixmap & star=var.toBool()?
favouritePixmap:notFavouritePixmap;

	int width=star.width();
	int height=star.height();
	QRect rect=option.rect;
	int x=rect.x()+rect.width()/2-width/2;
	int y=rect.y()+rect.height()/2-height/2;

	painter->drawPixmap(x,y,star);
}

bool MyItemDelegate::editorEvent(QEvent * event,
								 QAbstractItemModel * model,
								 const QStyleOptionViewItem & /*option*/,
								 const QModelIndex & index)
{
	if(event->type()==QEvent::MouseButtonPress &&
		index.column()==0){
			QVariant var=model->data(index,Qt::CheckStateRole);
			bool isFavourite=var.toBool();
			if(var.isValid())
				isFavourite=isFavourite?false:true;
			else
				isFavourite=true;
			model->setData(index,isFavourite,Qt::CheckStateRole);
			return true;//I have handled the event
	}

	return false;
}

QVariant MyStandardItemModel::data(
								   const QModelIndex & index,
								   int role) const
{
	int column=index.column();

	if(role==Qt::DisplayRole && column!=0)
		return column+1;
	if(role==Qt::ToolTipRole && column==0)
		return tr("love");
	return QStandardItemModel::data(index,role);
}

QVariant MyStandardItemModel::headerData(int section,
										 Qt::Orientation orientation,
										 int role) const
{
	if(section==0 && orientation==Qt::Horizontal){
		if(role==Qt::DecorationRole)
			return QIcon(":/favourite.png");
		if(role==Qt::DisplayRole)
			return "";
		if(role==Qt::ToolTipRole)
			return tr("love");
	}
	return QStandardItemModel::headerData(section,orientation,role);
}
 

 

转:http://www.oschina.net/code/snippet_96486_4133

  • 大小: 14.6 KB
分享到:
评论

相关推荐

    Qt GUI图形图像开发之QT表格控件QTableView详细使用方法与实例

    Qt GUI 图形图像开发中,QTableView 是一个非常重要的控件,它可以显示表格数据,实现数据的可视化展示。下面将详细介绍 QTableView 的使用方法与实例。 一、QTableView 简介 QTableView 是 Qt 中的一个表格视图...

    QTableView添加复选框,下拉框控件

    在Qt框架中,QTableView是用于显示表格数据的视图组件,它允许用户查看和编辑由模型提供的数据。在特定的开发场景中,我们可能需要增强QTableView的功能,例如为表格中的每一行添加复选框或者下拉框控件,以提供更多...

    tableview表格的折叠

    在iOS开发中,UITableView是一种非常常见且强大的控件,用于展示列表或表格数据。"tableview表格的折叠"这一主题涉及到如何实现一个可扩展和收缩的表格视图,让用户能够根据需要查看或隐藏某些行。这通常在层级结构...

    QTableView/QTableWidget自定义表头,添加复选框,下拉框控件

    在Qt框架中,`QTableView`和`QTableWidget`是两种常用的用于显示二维数据的控件。在一些复杂的用户界面设计中,我们可能需要对表头进行自定义,例如添加复选框或下拉框,以提供更丰富的交互功能。在本篇中,我们将...

    qt-3.0.5-doc(zh_CN).rar_doc

    QTable(在Qt 4及以后版本中被QTableView替代)是用于显示和编辑表格数据的控件。它可以动态调整大小,并支持行、列的添加、删除和排序。 8. **sql.html** - Qt的SQL模块提供了一系列与数据库交互的类,使得开发者...

    QT-4 programming

    Qt 支持富文本编辑功能,允许用户插入图片、超链接、格式化文本等。 **7.2 定制与打印 (Customization and Printing)** Qt 提供了对文本定制和打印的支持,包括页面布局、样式设置等功能。 #### 八、Web 集成与 ...

    Qt GUI图形图像开发之Qt表格控件QTableView简单使用方法及QTableView与QTableWidget区别

    QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件 QTableView类实现表格视图,QTableView的数据由继承QAbstractItemModel的子类models来提供 #include QStandardItemModel *model = new ...

    Qt常用的控件widgets-例程

    5. **QTextEdit** - 用于多行文本编辑,支持富文本格式,可以插入图片、链接等元素,常用于创建文本编辑器或日记应用。 6. **QCheckBox** 和 **QRadioButton** - 分别表示复选框和单选按钮,用于提供多个选项让用户...

    qt用户交互界面,大部分控件都用到了

    在QT中,如QTableView通常会有一个对应的QStandardItemModel来存储和操作数据。 最后,项目可能还涉及了资源文件(.qrc)的使用,这可以方便地管理和打包应用程序中的图像、音频等非代码资源。以及可能运用了...

    Qt连接mysql数据库足球项目

    在这个项目中,Qt被用来设计和实现用户界面,包括表格视图、按钮、输入框等元素,以便用户能够直观地进行数据操作。 2. **MySQL数据库**:MySQL是一款广泛使用的开源关系型数据库管理系统,支持多种数据类型和SQL...

    qt完成的工作记录程序

    `QTextEdit`不仅支持文本输入,还允许插入图片、表格等富文本元素,使得工作记录更加生动全面。 其次,为了保存日志,程序需要实现文件操作。在Qt中,这通常通过`QFile`、`QTextStream`或`QDataStream`类来实现。`...

    qt自带的控件使用

    3. **QTextEdit**:提供多行文本编辑功能,支持富文本格式,可以插入图片、超链接等。 4. **QLabel**:用于显示静态文本或图像,可设置对齐方式、字体等属性。 5. **QCheckBox** 和 **QRadioButton**:用于提供复...

    C++ QT5 电子书教程

    1.16 QTableView表格控件 35 1.17 QHBoxLayout横向布局 36 1.18 QGridLayout网格布局 37 1.19 QGroupBox控件 38 1.20 QTabWidget控件 39 1.21 QMenu、QToolBar控件 41 1.22 任务栏托盘菜单 43 第四章 组件应用 1.1日...

    qt各大知识点的小实例汇总

    你可以添加文字样式、颜色、超链接等,还可以插入图片和表格。结合QSyntaxHighlighter,可以实现代码高亮显示,适用于开发文本编辑器或代码编辑器应用。 6. **图形用户界面设计**:Qt Designer是一个可视化的UI设计...

    自定义表格,表头可合并单元格,自定义列数据

    在传统的表格控件中,例如Qt中的QTableView或QTableWidget,通常提供了基础的表格展示功能,如添加、删除、编辑行和列。然而,对于一些更复杂的需求,比如动态改变列宽、自定义渲染、表头合并等,就需要深入理解Qt的...

    Qt常用控件详细讲解

    `QTextEdit`比`QLineEdit`功能更加强大,它允许用户编辑多行文本,支持文本格式化、插入图片和表格等操作。如果需要创建富文本编辑器,`QTextEdit`是首选。 `QCheckBox`和`QRadioButton`用于提供复选框和单选按钮。...

    qt/c++ 标签,文档报表工具

    在Qt中,这可能涉及到`QTextDocument`类,它是一个富文本模型,可以处理复杂的格式化文本,包括段落、列表、嵌入图片、表格等。配合`QTextCursor`,开发者可以方便地在文档中插入、修改和删除内容。同时,`QPrinter`...

    基于QT的学生成绩管理系统,QSS界面设计,SQL数据库的使用。.zip

    此外,QT还提供了QSqlQuery、QModel和QTableView等类,使得在应用程序中操作数据库变得简单直观。 **系统功能** 基于上述技术,这个学生成绩管理系统可能包含以下关键功能: 1. **学生信息管理**:添加、编辑和删除...

    C++ qt5 电子版教程

    1.16 QTableView表格控件 35 1.17 QHBoxLayout横向布局 36 1.18 QGridLayout网格布局 37 1.19 QGroupBox控件 38 1.20 QTabWidget控件 39 1.21 QMenu、QToolBar控件 41 1.22 任务栏托盘菜单 43 第四章 组件应用 1.1日...

    毕设新项目-基于C++开发的校医院远程诊断系统源码+项目使用说明.zip

    读入图片:使用QFile类将图片读入,保存为QByteArray字节数组,然后将照片数据封装成QVariant变量,在字符串语句中以问号代替数据,然后使用prepare和addBindValue函数,最后执行插入语句exec 使用...

Global site tag (gtag.js) - Google Analytics