Qt: Изменить значок в объекте QFileInfo - PullRequest
1 голос
/ 07 ноября 2011
  • Мой главный вопрос:

Как установить / изменить значок файла в объекте QFileInfo? Если вы посмотрите на мой код, Qlist<QFileInfo> перечислит значок всех моих папок в моем домашнем каталоге как gnome-fs-directory. Это означает, что QFileInfo перечисляет даже значок папки на рабочем столе в виде обычного gnome-fs-directory.

Но я хочу, чтобы на рабочем столе была иконка QFileIconProvider :: Desktop.

  • Что, следовательно, приводит ко 2-му вопросу:

Является ли QFileInfo подходящим классом для определения значка, который будет использовать QFileSystemModel?

  • Что приводит к третьему вопросу:

Почему мой QDir не передал QFileSystemModel список QFileInfo с соответствующей ролью значка для рабочего стола?

  • Итак, главный вопрос в том, что мне нужно сделать, чтобы QFileSystemModel использовал соответствующую роль значков при перечислении себя в виде дерева или списка?

Код для определения значка файла каждой папки в домашней папке:

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);
}

Настройка модели для вида:

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

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

    fileIconInfo(model);
}

1 Ответ

1 голос
/ 08 ноября 2011

Я думаю, что то, что вы описываете, вызвано тем фактом, что QFileIconProvider обнаруживает, что вы используете Gnome, и использует стиль Gtk - несмотря ни на что. Не могли бы вы попытаться запустить какую-то другую рабочую среду и посмотреть, остались ли проблемы? Если это так, то я прав, и единственное, что вы можете сделать, это создать подкласс QFileSystemModel и изменить QIcon, возвращаемый методом данных, - но это довольно грубое и негибкое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...