Arrow
09 січня 2017 р. 21:42

Работа с QFileSystemModel

QFileSystemModel, QTableView

Для работы с QFileSystemModel использую QTableView. В нем отображаются заголовки колонок: name, size и т.д.

Как можно изменить отображаемые имена заголовков?

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

Для работы с шириной колонок нашел только метод

setColumnWidth()
2

Вам це подобається? Поділіться в соціальних мережах!

6
Evgenii Legotckoi
  • 09 січня 2017 р. 23:03
  • Відповідь була позначена як рішення.

1 Вопрос - наследоваться от QFileSystemModel и переопределить метод headerData

QVariant MyFileSystemModel::headerData(int section, Qt::Orientation orientation, int role) const
{

    if ((section == 0) && (role == Qt::DisplayRole) && (orientation == Qt::Horizontal))
    {
        return "Folder";
    } else {
        return QFileSystemModel::headerData(section, orientation, role);
    }
}

2 Вопрос - Установить растяжение колонки у самого QTableView, например у колонки под индексом 1:

ui->tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
    Arrow
    • 10 січня 2017 р. 01:48

    Спасибо.

      Arrow
      • 10 січня 2017 р. 02:16

      Решил первый вопрос по другому и очень не правильно:

      QTableWidget *tbl = new QTableWidget(this);
      QStringList strList;
      strList << "Имя" << "Размер" << "Тип" << "Дата";
      tbl->setColumnCount(4);
      tbl->setHorizontalHeaderLabels(strList);
      QHeaderView *header = tbl->horizontalHeader();
      ui->leftTableView->setHorizontalHeader(header);
      // Без этого отображается полоса прокрутки в ненужно месте
      tbl->setVisible(false);

      Замена заголовка своей таблицей.

        Evgenii Legotckoi
        • 10 січня 2017 р. 09:58

        Да. Вы правы. Решение не правильное. С архитектурной точки зрения не правильное.

        Вот это данные:

        QStringList strList;
        strList << "Имя" << "Размер" << "Тип" << "Дата";

        А данные следует хранить в модели данных, а не в представлении, как Вы сделали. В небольшом проекте это не будет проблемой, а вот в крупном проекте такой подход может создать проблемы. Всё-таки интерфейс должен быть более менее унифицирован и всю подобную информацию необходимо забирать из модели данных.

          Arrow
          • 11 січня 2017 р. 00:20

          Спасибо. Знаю, что нужно разделять, но так не хотелось наследоваться.

            AR
            • 06 червня 2023 р. 23:35

            Вопросик по теме QFileSystemModel в Linux.
            Он, как и положено, обновляется самостоятельно, если директория локальная. Но, вот, сетевая папка (у меня шара samba) не обновляется. Как её можно дёрнуть самостоятельно?
            Создаю model в конструкторе:

            1. model = new QFileSystemModel(this);
            2. model->setFilter(QDir::AllEntries);
            3. model->setRootPath("");
            4. ui->listView->setModel(model);

            Затем, обрабатываю клики:

            1. void TWgtFileList::on_listView_clicked(const QModelIndex &index)
            2. {
            3. QFileInfo fileInfo = model->fileInfo(index);
            4. if (fileInfo.fileName() == "..")
            5. {
            6. QDir dir = fileInfo.dir();
            7. dir.cdUp();
            8. ui->listView->setRootIndex(model->index(dir.absolutePath()));
            9. ui->lblPath->setText(model->filePath(ui->listView->rootIndex()));
            10. }
            11. else if (fileInfo.fileName() == ".")
            12. {
            13. ui->listView->setRootIndex(model->index(""));
            14. ui->lblPath->setText(model->filePath(ui->listView->rootIndex()));
            15. }
            16. else if (fileInfo.isDir())
            17. {
            18. QString str = model->filePath(ui->listView->rootIndex());
            19. ui->listView->setRootIndex(index);
            20. ui->lblPath->setText(str);
            21. }
            22. else if (fileInfo.isFile())
            23. fName = fileInfo.absoluteFilePath();
            24. }

            Если одновременно записать файл в сетевую папку, она в модели не обновляется. Что надо "дёрнуть"?

              Коментарі

              Only authorized users can post comments.
              Please, Log in or Sign up
              • Останні коментарі
              • Evgenii Legotckoi
                16 квітня 2025 р. 17:08
                Благодарю за отзыв. И вам желаю всяческих успехов!
              • IscanderChe
                12 квітня 2025 р. 17:12
                Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
              • AK
                01 квітня 2025 р. 11:41
                Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
              • Evgenii Legotckoi
                09 березня 2025 р. 21:02
                К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
              • VP
                09 березня 2025 р. 16:14
                Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…