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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QTreeView и иконки  (Прочитано 20359 раз)
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« : Сентябрь 27, 2005, 14:22 »

Создал модель на основе QAbstractItemModel

Подсоеденил ее к QTreeView - все отображается путем.

Хочу теперь что бы напротив каждого item стояла иконка, примерно как в QDirModel, но не нашел как.

Сорцы QDirModel не внушают уверености, так и не нашел как это они сделали.
Записан
nEoN
Гость
« Ответ #1 : Сентябрь 27, 2005, 17:04 »

Нужно у модели переопределить метод data() :
Код:
QVariant MyTableModel::data(const QModelIndex & index, int role) const
{
  switch(role)
  {
   ...
   case Qt::DecorationRole:
     return QIcon(...);
  }
  return QVariant();
}
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Сентябрь 27, 2005, 20:53 »

ага спасибо

я помаленьку сам догадался

эти модели меня с ума сводят
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Сентябрь 27, 2005, 21:26 »

теперь другой вопрос нарисовался

есть модель иерархическая
прекрасно отображается в QTreeView

в вот как ее отобразить в QListView
никак не пойму

при setModel отображается только верхний элемент и все
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #4 : Сентябрь 29, 2005, 14:52 »

оказалось что для QListView можно рулить через setRootIndex

Код:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QDirModel *model = new QDirModel;

    //QTreeView *tree = new QTreeView;
    //tree->setModel(model);
QListView *tree = new QListView;
tree->setModel(model);
tree->setRootIndex(model->index(QDir::currentPath()));

    tree->setWindowTitle(QObject::tr("Dir View"));
    tree->resize(640, 480);
    tree->show();

    return app.exec();
}
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Сентябрь 30, 2005, 10:56 »

Пытался я с ентой фигней раздуплиться... ИМХО очень все усложнено, трудно с прыжка вникнуть...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
nEoN
Гость
« Ответ #6 : Сентябрь 30, 2005, 11:46 »

Согласен. Простота принесена в жертву универсальности.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Сентябрь 30, 2005, 15:52 »

проще=быстрей... а такая универсальность больно уж ИМХО тормозюкать будет...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
bezzil
Гость
« Ответ #8 : Сентябрь 29, 2008, 10:05 »

обьясните пожалуйста более подробно как вставить иконки,
может у кого нибудь есть пример как это сделать.

и такой ещё вопрос, каким образом включить Qt::DecorationRole
« Последнее редактирование: Сентябрь 29, 2008, 10:09 от bezzil » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Сентябрь 29, 2008, 10:12 »

Используй QStandardItemModel, там есть:
QStandardItem ( const QIcon & icon, const QString & text )?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
bezzil
Гость
« Ответ #10 : Сентябрь 29, 2008, 10:32 »

в ассисте в упор такого не вижу - QStandardItem ( const QIcon & icon, const QString & text )?  Грустный
извиняюсь не там смотрел


в конец уже запутался  Грустный
На сколько я понял что бы иконки вставить в дерево, нада создать свою модель, переопределить метод дата, и каким то образом выставить Qt::DecorationRole. Помогите пожалуйста может у кого нибудь есть понятный код для примера , а то в голове уже каша  Грустный
« Последнее редактирование: Сентябрь 29, 2008, 10:34 от bezzil » Записан
spirit
Гость
« Ответ #11 : Сентябрь 29, 2008, 10:38 »

можно встроенные виджеты юзать, такие как QTableWidget, QTreeWidget & QListWidget, если задача не предусматривает какой-то навороченной модели.
Записан
bezzil
Гость
« Ответ #12 : Сентябрь 29, 2008, 10:44 »

можно встроенные виджеты юзать, такие как QTableWidget, QTreeWidget & QListWidget, если задача не предусматривает какой-то навороченной модели.
пока что не предусматривает,
для начала нада просто дерево с иконками, запутлася потом что поиск со словами "QTreeView и иконки" как на этом форуме так и на англиских приводил меня к обусуждениям об исползовании своих моделей. Спасиба пантеру, начинает прояснятся, что искал видимо не совсем то =)
Записан
spirit
Гость
« Ответ #13 : Сентябрь 29, 2008, 10:53 »

у каждого из виджетов есть классы-айтемы, которые непосредственно помагают сохранять/извлекать данные из модели. классы:
QTableWidgetItem, QTreeWidgetItem & QListWidgetItem.
Записан
bezzil
Гость
« Ответ #14 : Сентябрь 29, 2008, 11:23 »

Код:
	QDir dir;
dir.cd("C:/");
QStringList FileList=dir.entryList();
int listsize=FileList.size();
QDockWidget *somedock = new QDockWidget;
QTreeView *view = new QTreeView;
             QStandardItemModel newitemmodel;
for (int i = 0;i < listsize; ++i)
{
QStandardItem *item = new QStandardItem(QIcon("C:\install\icon.bmp"),FileList[i]);
newitemmodel.appendRow(item);
}
view->setModel(&newitemmodel);
view->setHeaderHidden(1);
somedock->setWidget(view);

addDockWidget(Qt::RightDockWidgetArea,somedock);

вот такой код получился, но что то не так, потому что дерево получается пустым  Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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