Arrow
Sept. 28, 2018, 7:40 p.m.

Установить иконку в строке в TreeView в QML

Добрый день!


За отсутствием в QML нормального диалога открытия файла для Android написал его сам.

Только столкнулся с тем, что не могу установить иконку в строке в TreeView в зависимости от того отображается в строке файл или папка.

Использую TreeView с моделью FolderListModel.

Сейчас это имеет такой вид:

А должна вместо иконки папки в последней строке отображаться иконка файла (ptc_licFile.dat - файл).

Код:

  1. TreeView {
  2. id: treeView
  3. anchors.fill: parent
  4. clip: true
  5. headerVisible: false
  6. model: FolderListModel {
  7. id: fileSystemModel
  8. }
  9. TableViewColumn {
  10. width: 38
  11. delegate: Image {
  12. fillMode: Image.PreserveAspectFit
  13. source: if (fileSystemModel.isFolder(treeView.currentIndex)) { // Определить это папка или файл
  14. return "qrc:/pict/folder.png"
  15. }
  16. else {
  17. return "qrc:/pict/file.png"
  18. }
  19. }
  20. }
  21. TableViewColumn {
  22. role: "fileName"
  23. }
  24. }

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

Если писать if (fileSystemModel.isFolder(treeView.currentIndex)) - не работает как нужно.

treeView.currentIndex - всегда 0, а нужно получить именно индекс текущей записи.

2

Do you like it? Share on social networks!

6
Arrow
  • Sept. 29, 2018, 9:18 p.m.

Еще столкнулся с такой проблемой в модели для TreeView пишу:

  1. import QtQuick 2.0
  2. import QtQuick.Controls 2.4
  3. import QtQml.Models 2.3
  4. import Qt.labs.folderlistmodel 2.2
  5. import QtQuick.Dialogs 1.2
  6.  
  7. ...............
  8.  
  9. model: FolderListModel {
  10. id: fileSystemModel
  11. showDirsFirst: true
  12. sortField: FolderListModel.Name
  13. nameFilters: [ "*.*" ]
  14. folder: shortcuts.home // Home
  15. }


В ответ при компиляции получаю:

ReferenceError: shortcuts is not defined


Я что-то забыл добавить? В документации на диалоги написано только добавить import QtQuick.Dialogs 1.2 ( FileDialog ).

shortcuts не работает и в самом FileDialog.


    Evgenii Legotckoi
    • Sept. 30, 2018, 6:09 p.m.
    • The answer was marked as a solution.

    Добрый день!

    По моему, currentIndex показывает текущий выбранный элемент, хотя могу и ошибаться.

    Попробуйте получить индекс через styleData, это более гарантированно возвращает правильный индекс.

    1. fileSystemModel.isFolder(styleData.index)

    Что касается shortcuts , то тут думаю, что лучше будет использовать StandardPaths из QML, просто в вашем случае возможно какие-то проблемы из-за самого модуля QtQuick.Controls 2.




      Arrow
      • Sept. 30, 2018, 6:32 p.m.

      Спасибо! Все работает.

        Arrow
        • Oct. 1, 2018, 6:12 p.m.

        Попробовал в диалоге писать:

        1. TableViewColumn {
        2. width: 38
        3. delegate: Image {
        4. id: img
        5. fillMode: Image.PreserveAspectFit
        6. source: if (fileSystemModel.isFolder(styleData.index)) {
        7. return "qrc:/pict/folder.png"
        8. }
        9. else {
        10. return "qrc:/pict/file.png"
        11. }
        12. }
        13. }

        По console.log() индексы выводит правильные, только isFolder выдает не верный результат.

        Может есть другой способ, кроме isFolder?

          Evgenii Legotckoi
          • Oct. 1, 2018, 6:20 p.m.

          ммм... я сейчас посмотрел описание метода isFolder и там оказывается принимается значение int в качестве индекса, возможно он ожидает номер строки, а currentIndex возвращал QModelIndex, также как и styleData.index

          Попробуйте передать туда номер строки, то есть так

          1. fileSystemModel.isFolder(styleData.row)

          или так

          1. fileSystemModel.isFolder(treeView.currentIndex.row)

            Arrow
            • Oct. 1, 2018, 6:33 p.m.

            Спасибо!

            Корректно отрабатывает вариант

            1. fileSystemModel.isFolder(styleData.row)

            Если использовать

            1. fileSystemModel.isFolder(treeView.currentIndex.row)
            во всех строках каждый раз меняется иконка при переходе по строкам в treeView.


              Comments

              Only authorized users can post comments.
              Please, Log in or Sign up
              • Last comments
              • AK
                April 1, 2025, 11:41 a.m.
                Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
              • 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