gpt4 book ai didi

c++ - 在 QTreeView 中显示图像

转载 作者:行者123 更新时间:2023-11-30 02:48:19 25 4
gpt4 key购买 nike

我试图在 QTreeView 中显示图像以及一些其他数据。为此,我创建了一个 QAbstractItemModel。在 data 方法中,我为列索引 0 和 1 返回一些字符串,对于第三个我希望返回一个图像。但是,此图像未显示。

当我将图像作为装饰返回时,它显示正常,但我希望将点击监听器添加到将触发某些事件的图像中。我还希望将我的图像定位在 TreeView 的最右侧,这似乎需要一个自定义委托(delegate)。出于这些原因,我为图像创建了一个单独的列。

图像在构造函数中创建如下:mEditImage = QImage(":/images/myImage.png");

我的模型

QVariant MyModel::data(const QModelIndex &index, int role)  const {
if (!index.isValid()) {
return QVariant();
}

if(role == Qt::FontRole) {
return fontData(index);
}

if(role == Qt::ForegroundRole) {
return foreGroundData(index);
}


MyModelItem *item = getItem(index);

/*
* Use decoration to display image. Probably needs a
* custom delegate to be able to position the image correctly.
* (http://www.qtcentre.org/threads/49639-decoration-position-and-alignment)
* (https://qt-project.org/forums/viewthread/24493)
*
* Will use extra column for now instead. Might help with click
* listeners as well.
*
* if(role == Qt::DecorationRole && item->parent() != mRootItem) {
return index.column() == 1 ? mEditImage : QVariant();
}*/

if(role == Qt::SizeHintRole) {
return mEditImage.size();
}

if (role == Qt::DisplayRole) {

QString id = QString::number(item->id());
QString name = item->name();

if(item->parent() != mRootItem && index.column() == 2) {
return mEditImage;
}

if(item->parent() == mRootItem){
return index.column() == 0 ? name : "";
} else {
return index.column() == 0 ? id : name;
}
} else if(role == Qt::BackgroundRole) {
return QVariant();
}

我看过这里:

http://www.qtcentre.org/threads/29550-How-do-I-display-a-picture-on-a-QTableView-cell

How to set an image for a row?

我已经尝试将图像更改为 QPixmapQIcon,还尝试将其嵌入 QLabel(无法转换到 QVariant) 没有运气。将图像更改为 QString 显示字符串,因此行/列逻辑看起来很好。删除 SizeHintRole 逻辑也没有任何区别。

任何有助于理解如何在 QTreeView 中显示图像数据的帮助都会有所帮助。我似乎是从错误的方向出发。

干杯。

最佳答案

没关系,图片怎么存。 QPixmap 更适合快速绘图。

QVariant MyModel::data(const QModelIndex &index, int role) const
{
item = itemFromIndex( index ); // Your item implementation
...
case Qt::DisplayRole:
return item->getText();
case Qt::DecorationRole:
return item->getImage();
}

阅读有关角色的 Qt 文档,这很好 - http://doc.qt.io/qt-4.8/qt.html#ItemDataRole-enum

关于c++ - 在 QTreeView 中显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22093510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com