重写QSqlQueryModel实现QTableView显示图片

Qt QTableView
0 448
suoniao 2021-04-10
需要:0索币

方法一:代理

新建一个代理类,重写paint函数:

class CommonDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
CommonDelegate();
private:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
CommonDelegate::CommonDelegate()
{
}
void CommonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem itemOption(option);
if(itemOption.state&QStyle::State_HasFocus)
{
itemOption.state=itemOption.state^QStyle::State_HasFocus;
}
if(3==index.column())
{
QPixmap pix;
if(QString("结案")==index.data().toString())
pix.load(":/Resources/check.png");
else if(QString("激活")==index.data().toString())
pix.load(":/Resources/active.png");
QRect rect=option.rect;
rect.adjust(0,6,0,0);
rect.setSize(QSize(20,20));
pix.scaled(20,20,Qt::KeepAspectRatio);
painter->setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);
painter->drawPixmap(rect,pix);
}
QStyledItemDelegate::paint(painter,itemOption,index);
}

TableView设置:

this->setItemDelegate(new CommonDelegate());

效果:

图标和文字重叠,且点击后看不到图标,这不是我想要的效果。

方法二:重写Model

继承QSqlQueryModel(一般使用QSqlTableModel即可),重写data函数:

class SqlTableModel : public QSqlQueryModel
{
Q_OBJECT
public:
explicit SqlTableModel(QObject *parent=0);
~SqlTableModel();
QVariant data(const QModelIndex &idx, int role) const;
};
QVariant SqlTableModel::data(const QModelIndex &idx, int role) const
{
QVariant value=QSqlQueryModel::data(idx,role);
if(3==idx.column()&&Qt::DecorationRole==role)
{
QString PNType=idx.data().toString();
if(QString("结案")==PNType)
{
return QIcon(":/Resources/check.png");
}
else if(QString("激活")==PNType)
{
return QIcon(":/Resources/active.png");
}
}
return value;
}

效果:

部分效果需要使用QSS:

QTableView{
font-family:"Microsoft Yahei";
font-size:10pt;
color: rgb(26,52,93);
selection-color: black;
selection-background-color: rgb(255,209,128);
border: 0px;
border-top: 1px solid lightgray;
}

更多QSS使用方法,在Qt助手中搜索stylesheet,在Qt Style Sheets Examples 中查看。

原文地址:http://voidcat.cn/index.php/2019/03/29/qtableview-icon/

回帖
  • 消灭零回复
相关主题
Qt利用QLabel组件来显示图片 0
TableView自定义代理QStyledItemDelegate实现ComboBox 0
Qt利用QGraphicsView类实现图片放大缩小平移显示 0
Qt实现非阻塞延迟方法sleep 0
Qt实现webdav客户端功能支持https协议的webdav客户端 0
Qt操作windows注册表的方法 bat从注册表中将键值删除 0
重写QSqlQueryModel实现QTableView显示图片 0
QLocalServer基于本地套接字socket的服务端server 0
Qt使用动态库的方法 QLibrary库的典型用法 0
QT实现视频播放器界面开发 0
QTableview实现鼠标放上面显示不同颜色 0
Qt的QTableView自定义委托详解 0
QTableView利用自定义委托实现日期显示下拉菜单文字颜色等 0
Qt利用QApplication::sendEvent和QMouseEvent模拟鼠标点击事件 0
Qt获取父进程路径和父进程ID代码 0
QStyledItemDelegate和QItemDelegate区别在于绘制和向视图提供编辑器的方式 0
Qt实现全局快捷键功能利用QxtGlobalShortcut库 0
利用QSS去掉QListWidget选中时的虚线框 0
如何自己使用 QEventLoop解决窗口一闪而过的问题 0
Qt 为什么没有提供跨平台的 sleep 函数? 0
相关主题
打印机USB驱动开发之实现打印服务器 0
Qt利用QLabel组件来显示图片 0
TableView自定义代理QStyledItemDelegate实现ComboBox 0
Qt利用QGraphicsView类实现图片放大缩小平移显示 0
Qt实现非阻塞延迟方法sleep 0
海康相机SDK的C++对应的接口 0
Qt实现webdav客户端功能支持https协议的webdav客户端 0
CHKDSK解决 移动硬盘只能看见盘符其它信息都看不见另外双击也打不开 0
gogs一直报errror:dial tcp xxx.xxx.xxx.xxx 宿主机的ip 0
索鸟快传2.1.2发布 0
索鸟快传2.1.1发布 0
Qt操作windows注册表的方法 bat从注册表中将键值删除 0
重写QSqlQueryModel实现QTableView显示图片 0
QLocalServer基于本地套接字socket的服务端server 0
Qt使用动态库的方法 QLibrary库的典型用法 0
QT实现视频播放器界面开发 0
QTableview实现鼠标放上面显示不同颜色 0
Qt的QTableView自定义委托详解 0
QTableView利用自定义委托实现日期显示下拉菜单文字颜色等 0
Qt利用QApplication::sendEvent和QMouseEvent模拟鼠标点击事件 0