现在的位置: 首页 > 综合 > 正文

QTableView add row background-iamge

2013年01月06日 ⁄ 综合 ⁄ 共 3752字 ⁄ 字号 评论关闭
TrackDelegate::TrackDelegate(QObject *parent)
: QItemDelegate(parent)

void TrackDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{

		QStyleOptionViewItem  viewOption(option);
		QString backgroundImage;
		if (viewOption.state & QStyle::State_Selected)
		{
			backgroundImage = "image2.png";
		}else{
			backgroundImage = "image.png";
		}
		if (viewOption.state & QStyle::State_Selected)
		viewOption.state = viewOption.state ^ QStyle::State_Selected;

		if (viewOption.state & QStyle::State_HasFocus)
			viewOption.state = viewOption.state ^ QStyle::State_HasFocus;
		QPixmap pixmap(backgroundImage);
		pixmap.scaled(option.rect.width(),option.rect.height());
		qDebug()<<"backgroundImage"<<backgroundImage;
		qDebug()<<option.rect.width()<<option.rect.height();
		QBrush brush(pixmap);
		painter->save();
		painter->fillRect(option.rect, brush/*QColor(238, 233, 233, 255)*/);
		painter->restore();
		viewOption.rect = QRect(option.rect.x(), option.rect.y(), option.rect.width(), option.rect.height());
	switch (index.column())
	{
	case 0:
		{
			QVariant var= index.model()->data(index,Qt::DisplayRole);
			QString strStempJpgPath = var.toString();
			QPixmap pixmap(strStempJpgPath);
			//int width=pixmap.width();
			//int height=pixmap.height();

			/*	For example, if you have code like
			pixmap.resize(size);
			you can rewrite it as
			pixmap = pixmap.copy(QRect(QPoint(0, 0), size));
			*/

			//pixmap = pixmap.copy(QRect(QPoint(10, 10), size)); //图片去掉边缘

			//将图片的宽和高都缩放,并且在给定的矩形内保持宽高的比值
			pixmap = pixmap.scaled(option.rect.width(),option.rect.height(),Qt::KeepAspectRatio);
			painter->drawPixmap(option.rect.x(),option.rect.y(),pixmap);
			break;
		}
	case 3:
		{
			int progress = index.model()->data(index,Qt::DisplayRole).toInt();
			QStyleOptionProgressBar progressBarOption;
			progressBarOption.rect = QRect(option.rect.x(), option.rect.y()+(SETHEIGHT - PROGRESSBARHEIGHT)/2, option.rect.width(), /*option.rect.height()*/PROGRESSBARHEIGHT);
			progressBarOption.state |= QStyle::State_Enabled;
			progressBarOption.direction = QApplication::layoutDirection();
			progressBarOption.fontMetrics = QApplication::fontMetrics();
			progressBarOption.minimum = 0;
			progressBarOption.maximum = 100;
			progressBarOption.textAlignment = Qt::AlignCenter;
			progressBarOption.textVisible = true;
			progressBarOption.progress = progress < 0 ? 0 : progress;
			progressBarOption.text = QString().sprintf("%d%%", progressBarOption.progress);
			QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
			break;
		}
	case 4:
		{
			QPushButton * statusBtn;
			int status = index.model()->data(index,Qt::DisplayRole).toInt();
			QStyleOptionButton pushButtonOption;
			pushButtonOption.rect = QRect(option.rect.x(), option.rect.y()+((100 - 20)/2), 20,20);
			pushButtonOption.state |= QStyle::State_Enabled;
			pushButtonOption.direction = QApplication::layoutDirection();
			switch (status)
			{
			case DOWNLOAD_START:
				{
					pushButtonOption.state |=QStyle::State_None;
					pushButtonOption.icon = QIcon("play.png");
					statusBtn = startDownloadStatusBtn;
					break;
				}
			case DOWNLOAD_STOP:
				{
					pushButtonOption.state |=QStyle::State_None;
					pushButtonOption.icon = QIcon("pause.png");
					statusBtn = stopDownloadStatusBtn;
					break;
				}
			case DOWNLOAD_START_HOVER:
				{
					pushButtonOption.state |= QStyle::State_MouseOver;
					pushButtonOption.icon = QIcon("play_hover.png");
					statusBtn = startDownloadStatusBtn;
					break;
				}
			case DOWNLOAD_START_PRESSED:
				{
					pushButtonOption.state |= QStyle::State_Sunken;
					pushButtonOption.icon = QIcon("play_hover.png");
					statusBtn = startDownloadStatusBtn;
					break;
				}
			case DOWNLOAD_STOP_HOVER:
				{
					pushButtonOption.state |= QStyle::State_MouseOver;
					pushButtonOption.icon = QIcon("pause_hover.png");
					statusBtn = stopDownloadStatusBtn;
					break;
				}
			case DOWNLOAD_STOP_PRESSED:
				{
					pushButtonOption.state |= QStyle::State_Sunken;
					pushButtonOption.icon = QIcon("pause_hover.png");
					statusBtn = stopDownloadStatusBtn;
					break;
				}
			default:
				{
					break;
				}
			}
			pushButtonOption.iconSize = QSize(30, 30);
			QApplication::style()->drawControl(QStyle::CE_PushButton, &pushButtonOption, painter, statusBtn);
			break;
		}
	default:
		QItemDelegate::paint(painter, viewOption,index);
		break;
	}
}

抱歉!评论已关闭.