gpt4 book ai didi

c++ - Qt:更改 QFileInfo 对象中的图标

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:14 25 4
gpt4 key购买 nike

  • 我最重要的问题是:

如何设置/更改 QFileInfo 对象中的文件图标?如果您查看我的代码,Qlist<QFileInfo>将我的主目录中所有文件夹的图标列为 gnome-fs-directory。这意味着,QFileInfo 甚至将我的桌面文件夹的图标列为普通的 gnome-fs-directory。

但我希望桌面有 QFileIconProvider::Desktop 作为图标。

  • 由此引出第二个问题:

QFileInfo 是用于找出 QFileSystemModel 将使用的图标的适当类吗?

  • 引出第三个问题:

为什么我的 QDir 没有向 QFileSystemModel 传递一个具有适当桌面图标角色的 QFileInfo 列表?

  • 所以最终的问题是,当 QFileSystemModel 在 TreeView 或 ListView 中列出自身时,我必须做什么才能确保它使用适当的图标角色?

查找home文件夹中各个文件夹的文件图标的代码:

void MainWindow::fileIconInfo(QFileSystemModel *model)
{
QFileIconProvider *iconprov = model->iconProvider();

QFileInfoList fileInfoList = QDir::home().entryInfoList();
QFileInfoList::Iterator i;

foreach (QFileInfo fi, fileInfoList){

if (fi.fileName() == QString("Desktop"))
/*change the icon to QFileIconProvider::Desktop*/;

//the following line indicates all my icons are gnome-fs-directory!!*/
std::cout << iconprov->icon(fi).name().toStdString() << std::endl;
}
}

这是我的主窗口:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
fileSystemTree(ui->listView);
fileSystemTree(ui->treeView);
}

为 View 设置模型:

void MainWindow::fileSystemTree(QAbstractItemView *view) {
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::homePath());

view->setModel(model);
view->setRootIndex(model->index(QDir::homePath()));

fileIconInfo(model);
}

最佳答案

我认为您所描述的是由于 QFileIconProvider 检测到您使用的是 Gnome,并且使用的是 Gtk 样式 - 无论如何。您能否尝试启动其他桌面环境并查看问题是否仍然存在?如果确实如此,那么我是对的,您唯一能做的就是子类化 QFileSystemModel 并更改从数据方法返回的 QIcon - 但这是非常粗糙且不灵活的解决方案。

关于c++ - Qt:更改 QFileInfo 对象中的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8032324/

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