Arrow
Қаң. 9, 2017, 9:42 Т.Қ.

Работа с QFileSystemModel

QFileSystemModel, QTableView

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

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

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

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

setColumnWidth()
2

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

6
Evgenii Legotckoi
  • Қаң. 9, 2017, 11: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, 1:48 Т.Ж.

    Спасибо.

      Arrow
      • Қаң. 10, 2017, 2: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, 9:58 Т.Ж.

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

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

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

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

          Arrow
          • Қаң. 11, 2017, 12:20 Т.Ж.

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

            AR
            • Маусым 6, 2023, 11: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. }

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

              Пікірлер

              Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
              Кіріңіз немесе Тіркеліңіз