Arrow
Jan. 9, 2017, 9:42 p.m.

Работа с QFileSystemModel

QFileSystemModel, QTableView

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

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

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

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

setColumnWidth()
2
6
Evgenii Legotckoi
  • Jan. 9, 2017, 11:03 p.m.
  • The answer was marked as a solution.

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
    • Jan. 10, 2017, 1:48 a.m.

    Спасибо.

      Arrow
      • Jan. 10, 2017, 2:16 a.m.

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

      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
        • Jan. 10, 2017, 9:58 a.m.

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

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

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

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

          Arrow
          • Jan. 11, 2017, 12:20 a.m.

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

            AR
            • June 6, 2023, 11:35 p.m.

            Вопросик по теме 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. }

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

              Comments

              Only authorized users can post comments.
              Please, Log in or Sign up
              • Last comments
              • Evgenii Legotckoi
                March 9, 2025, 9:02 p.m.
                К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
              • VP
                March 9, 2025, 4:14 p.m.
                Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
              • ИМ
                Nov. 22, 2024, 9:51 p.m.
                Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
              • Evgenii Legotckoi
                Oct. 31, 2024, 11:37 p.m.
                Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
              • A
                Oct. 19, 2024, 5:19 p.m.
                Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html