是否有类似QtableWidgetItem的东西,我可以在QtableVIEw中使用它?
我使用QsqltableModel.
解决方法 一个粗略的想法是使用QStandardItem::setData
在其上设置Qpixmap(转换为QVariant),然后您可以在 QStandardItemModel
上设置QStandardItem. 顺序:QImage —> Qpixmap —> QVariant —> QStandardItem —> QStandardItemmodel
例如:
QStandardItemmodel *model = new QStandardItemmodel;QImage image(":/cat/lovers/own/myCat.jpg");QStandardItem *item = new QStandardItem();item->setData(QVariant(Qpixmap::fromImage(image)),Qt::decorationRole);model->setItem(0,item);ui->tableVIEw->setModel(model);
您必须调整图像大小或单元格大小,具体取决于您的需要.
[编辑]
如果您使用的是QsqltableModel,请继续使用它.我们需要做的就是将这些路径字符串放入Qpixmap,并将该项角色设置为该列中的Qt :: decorationRole.
正如文件所说:
Each item has a number of data elements associated with it and they can be retrIEved by specifying a role (see Qt::ItemDaTarole) to the
model’s data() function.
要做到这一点,概念很简单:提供QtableVIEw和QVariant的QVariant,因为QtableVIEw根据Qt::DecorationRole
渲染它们.
您可以继承QsqltableModel并重新实现虚函数QVariant data(const QModelIndex & index,int role = Qt::DisplayRole)
并使图像列返回Qpixmap作为QVariant,具有装饰角色.所以做这样的事情:
QVariant CustomsqltableModel::data(const QModelindex &IDx,int role = Qt::displayRole) const{ if (IDx.column() == imageColumn) { QString imgfile = QsqltableModel::data(IDx,Qt::displayRole); // get path string if (role == Qt::displayRole) return QString(); // return the path string for display role QImage image(imgfile); /* some modification to the image,maybe */ Qpixmap pixmap(imgfile); if (role == Qt::decorationRole) return pixmap; // return Qpixmap for decoration role if (role == Qt::SizeHintRole) return pixmap.size(); // in case need the image size } return QsqltableModel::data( IDx,role ); // use original data() outsIDe the imageColumn}
此外,您还可以尝试子类化qstyledItemDelegate并重新实现paint()
函数来自定义您自己的委托,但这需要更复杂的工作.使用委托的示例可以在here找到.您可以使用委托,even a button绘制任何您想要的内容.
*对不起代码没有经过测试,因为我手头没有数据库.
总结以上是内存溢出为你收集整理的c – 在QSqlTableModel的QTableView列中显示图像全部内容,希望文章能够帮你解决c – 在QSqlTableModel的QTableView列中显示图像所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)