Russian Qt Forum
Апрель 16, 2024, 22:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Боковое меню ввиде дерева  (Прочитано 5103 раз)
Larry
Гость
« : Ноябрь 26, 2017, 14:55 »

Добрый день, форумчане.
Необходимо реализовать боковое меню ввиде дерева. Возник вопрос, как у QTreeWidget поменять индикаторы свертывания/развертывания...
Сделать необходимо, что-то типа такого как на рисунке.
Я так понимаю что это необходимо делать через делегаты?! Или я ошибаюсь и можно как-то по другому?
Спасибо.
« Последнее редактирование: Ноябрь 27, 2017, 19:36 от Larry » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Ноябрь 27, 2017, 09:20 »

Через стили, я думаю, можно иконку поменять: https://stackoverflow.com/questions/16018974/qtreeview-remove-decoration-expand-button-for-all-items

Еще, думаю, попробовать через DecorationRole изменить. (тогда и через какой-нибудь item.setIcon у сложных моделей будет работать)
Записан

Larry
Гость
« Ответ #2 : Ноябрь 27, 2017, 09:36 »

Спасибо большое. Попробую.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #3 : Ноябрь 27, 2017, 10:14 »

Может, так:
Код
C++ (Qt)
QVariant CScriptCollectionModel::data(const QModelIndex &index, int role) const
{
   if (!index.isValid())
       return QVariant();
 
   // icons
   if(role==Qt::DecorationRole) {
       QString icon;
       if(getItem(index)->isScript()) {
           // scripts
           icon=(index.column()==0)? ":/images/script_16.png" : ":/images/link_pointer.png";
       } else if (index.column()==0) {
           // folders
           icon=(treeView->isExpanded(index))?
                ":/images/folderopen1.png":":/images/folderclosed1.png";
       }
       return QIcon(icon);
 
   // names
   } else if (role == Qt::DisplayRole || role == Qt::EditRole) {
       return getItem(index)->data(index.column());
 
   } else
       return QVariant();
}
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Larry
Гость
« Ответ #4 : Ноябрь 27, 2017, 15:56 »

Здесь надо поменять внешний вид изображения сворачивания/разворачивания ("птички вправо/вниз")...И как писал выше gil9red - это можно сделать через стили...еще не пробовал, но в стилях есть свойство branch и там можно поменять изображения "branch-open.png" и "branch-closed.png".
Записан
Larry
Гость
« Ответ #5 : Ноябрь 27, 2017, 15:59 »

В примерах по стилям как раз есть замена изображений в ветках:
http://doc.qt.io/qt-5/stylesheet-examples.html
Записан
Larry
Гость
« Ответ #6 : Ноябрь 27, 2017, 19:35 »

Попробовал, как в примерах и все заработало.
В стилях QTreeWidget прописал следующее:

Код:
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings
{
        border-image: none;
        image: url(:/images/resource/images/branch_close.png);
}

QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings 
{
        border-image: none;
        image: url(:/images/resource/images/branch_open.png);
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 22.