QTreeWidget 显示图标问题

时间:2022-03-09 18:48:51
我通过QTreeWidget得到了本地目录下的所有文件名、大小等信息
但是就是没有相应的图标,比如 mp4格式的avi格式的图标在上面都不显示

各位高手,这个该怎么添加图标呢?

我之前看文档,说的是通过文件后缀名来搞定

比如 QIcon icon(".mp4");

item->setIcon(0, icon);
但这样没反应,所以这个该怎么做,提醒下,谢谢

10 个解决方案

#1


QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(":/1.jpg"),也可以写成绝对路径("E:\\1.jpg").

#2


引用 1 楼 ty_jiang 的回复:
QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(":/1.jpg"),也可以写成绝对路径("E:\\1.jpg").

那我应该怎样获取系统的默认图标呢?

因为文件很多,比如mp4 mp3 avi等格式

#3


引用 2 楼 namelij 的回复:
引用 1 楼 ty_jiang 的回复:

QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(":/1.jpg"),也可以写成绝对路径("E:\\1.jpg").

那我应该怎样获取系统的默认图标呢?

……

记得QFileSystemModel就可以获得默认的图标

#4


学习了 在c++区也一直看到你

#5


引用 3 楼 fariel_zhang 的回复:
引用 2 楼 namelij 的回复:

引用 1 楼 ty_jiang 的回复:

QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(":/1.jpg"),也可以写成绝对路径("E:\\1.jpg"……


谢谢3楼的提醒。
找到一种方法:
QFileSystemModel *fileModel = new QFileSystemModel(this);

QModelIndex a=fileModel->index("F://Media//apple.mp4");//这里要找一个你所要格式图片的文件了。

QIcon icon;

if(a.isValid())
        icon = fileModel->fileIcon(a);
这样就OK了,不过觉得还是不太灵活。

#6


资源文件里加 

#7


model = new QDirModel;
tree = new QTreeView;
ui.treeView->setModel(model);

QString ls = "./replay";
QDir lsDir(ls);
ui.treeView->setRootIndex(model->index(lsDir.canonicalPath()));

// Demonstrating look and feel features
ui.treeView->setAnimated(false);
ui.treeView->setIndentation(20);
ui.treeView->setSortingEnabled(true);

#8


引用 5 楼 ty_jiang 的回复:
引用 3 楼 fariel_zhang 的回复:

引用 2 楼 namelij 的回复:

引用 1 楼 ty_jiang 的回复:

QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(……

我按照你的办法,所有的文件都显示的是文件夹的图标,而不管是不是文件夹
代码如下:



QFileSystemModel *fileModel = new QFileSystemModel(serverPathTreeWidget);


                    QModelIndex a=fileModel->index(infoName);
                    QIcon icon;
                    icon = fileModel->fileIcon(a);
QTreeWidgetItem *dir = new QTreeWidgetItem(fileColumn);
dir->setIcon(0, icon);

其中infoName为全路径名,比如/1.avi
我这是从服务器上得到文件的名字,然后设置其图标

#9


引用 8 楼 namelij 的回复:
引用 5 楼 ty_jiang 的回复:

引用 3 楼 fariel_zhang 的回复:

引用 2 楼 namelij 的回复:

引用 1 楼 ty_jiang 的回复:

QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


……


这样哦,在服务器上取到的文件可能无法正确显示吧。
给你两种办法哦:
1、在本地放一些相应的文件(.avi,.mp3等,无任何意义,只获取图标),然后把图标加载到Icon中,再用。
2、做一些相应的图片做为资源文件加载。
关于服务器上文件不能正确显示图标这个还有待进一步研究。。。。

#10


引用楼主  的回复:
我通过QTreeWidget得到了本地目录下的所有文件名、大小等信息
但是就是没有相应的图标,比如 mp4格式的avi格式的图标在上面都不显示

各位高手,这个该怎么添加图标呢?


看了你的帖子,当时你已经成功将本地文件显示到了QTreeWidget上了,可是我现在看了QT自带的demo后,还是不能成功显示,能指点一下吗?

#1


QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(":/1.jpg"),也可以写成绝对路径("E:\\1.jpg").

#2


引用 1 楼 ty_jiang 的回复:
QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(":/1.jpg"),也可以写成绝对路径("E:\\1.jpg").

那我应该怎样获取系统的默认图标呢?

因为文件很多,比如mp4 mp3 avi等格式

#3


引用 2 楼 namelij 的回复:
引用 1 楼 ty_jiang 的回复:

QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(":/1.jpg"),也可以写成绝对路径("E:\\1.jpg").

那我应该怎样获取系统的默认图标呢?

……

记得QFileSystemModel就可以获得默认的图标

#4


学习了 在c++区也一直看到你

#5


引用 3 楼 fariel_zhang 的回复:
引用 2 楼 namelij 的回复:

引用 1 楼 ty_jiang 的回复:

QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(":/1.jpg"),也可以写成绝对路径("E:\\1.jpg"……


谢谢3楼的提醒。
找到一种方法:
QFileSystemModel *fileModel = new QFileSystemModel(this);

QModelIndex a=fileModel->index("F://Media//apple.mp4");//这里要找一个你所要格式图片的文件了。

QIcon icon;

if(a.isValid())
        icon = fileModel->fileIcon(a);
这样就OK了,不过觉得还是不太灵活。

#6


资源文件里加 

#7


model = new QDirModel;
tree = new QTreeView;
ui.treeView->setModel(model);

QString ls = "./replay";
QDir lsDir(ls);
ui.treeView->setRootIndex(model->index(lsDir.canonicalPath()));

// Demonstrating look and feel features
ui.treeView->setAnimated(false);
ui.treeView->setIndentation(20);
ui.treeView->setSortingEnabled(true);

#8


引用 5 楼 ty_jiang 的回复:
引用 3 楼 fariel_zhang 的回复:

引用 2 楼 namelij 的回复:

引用 1 楼 ty_jiang 的回复:

QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


".mp4"必须是一个图像的路径,可以在资源文件中加载(……

我按照你的办法,所有的文件都显示的是文件夹的图标,而不管是不是文件夹
代码如下:



QFileSystemModel *fileModel = new QFileSystemModel(serverPathTreeWidget);


                    QModelIndex a=fileModel->index(infoName);
                    QIcon icon;
                    icon = fileModel->fileIcon(a);
QTreeWidgetItem *dir = new QTreeWidgetItem(fileColumn);
dir->setIcon(0, icon);

其中infoName为全路径名,比如/1.avi
我这是从服务器上得到文件的名字,然后设置其图标

#9


引用 8 楼 namelij 的回复:
引用 5 楼 ty_jiang 的回复:

引用 3 楼 fariel_zhang 的回复:

引用 2 楼 namelij 的回复:

引用 1 楼 ty_jiang 的回复:

QIcon::QIcon ( const QPixmap & pixmap )
Constructs an icon from a pixmap.


……


这样哦,在服务器上取到的文件可能无法正确显示吧。
给你两种办法哦:
1、在本地放一些相应的文件(.avi,.mp3等,无任何意义,只获取图标),然后把图标加载到Icon中,再用。
2、做一些相应的图片做为资源文件加载。
关于服务器上文件不能正确显示图标这个还有待进一步研究。。。。

#10


引用楼主  的回复:
我通过QTreeWidget得到了本地目录下的所有文件名、大小等信息
但是就是没有相应的图标,比如 mp4格式的avi格式的图标在上面都不显示

各位高手,这个该怎么添加图标呢?


看了你的帖子,当时你已经成功将本地文件显示到了QTreeWidget上了,可是我现在看了QT自带的demo后,还是不能成功显示,能指点一下吗?