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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: ширина колонок и скрольбар QTreeView  (Прочитано 5026 раз)
rik_mik_
Гость
« : Июль 12, 2016, 16:14 »

Доброго времени суток.
Объясните что не так делаю.

Хочу чтобы у QTreeView была ширина 200
Код:
my_tree_view->setMinimumWidth(200);
my_tree_view->setMaximumWidth(200);
У моей модели 2 стобца, соответственно для первого делаю
Код:
 my_tree_view->setColumWidth(0, 200-24);
а для второго
Код:
 my_tree_view->setColumWidth(1, 24);
При запуске отображается горизонтальный скролбар, который мне НЕ НУЖЕН.
От него можно избавиться политикой, НО при нажатии на 2 столбец всё отображение съедит влево
Исправит ситуацию увеличение ширины my_tree_view на 20
или уменьшение ширины первого столбца
Код:
my_tree_view->setMinimumWidth(220);
my_tree_view->setMaximumWidth(220);
Но так не красиво отображается 2 столбец он становиться больше чем требуется
Что я не так делаю ??

Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Июль 12, 2016, 16:21 »

Доброго времени суток.
Объясните что не так делаю.

Хочу чтобы у QTreeView была ширина 200
Код:
my_tree_view->setMinimumWidth(200);
my_tree_view->setMaximumWidth(200);


чем плох void QWidget::setFixedWidth(int w)?
Записан
rik_mik_
Гость
« Ответ #2 : Июль 12, 2016, 16:32 »

Цитировать
чем плох void QWidget::setFixedWidth(int w)?
Можно так, разницы не наблюдаю.
Суть вопроса как сделать фиксированную ширину колонок в qtreeview и фиксированную ширину самого qtreeview, чтобы не было горизонтального скрольбара и
самое главное не было съезжания отображения дерева влево при нажатии на второй столбец (это съезжание связано с тем что "фокус" скролбара наводиться на второй столбец)
« Последнее редактирование: Июль 12, 2016, 16:41 от rik_mik_ » Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #3 : Июль 12, 2016, 16:48 »

Может у вас где-то задействован void QTreeView::resizeColumnToContents(int column)?

Пробую на тестовом примере, вроде все нормально:

Записан
rik_mik_
Гость
« Ответ #4 : Июль 13, 2016, 11:51 »

Во  скрины моего проекта

Записан
rik_mik_
Гость
« Ответ #5 : Июль 13, 2016, 11:53 »

а вот исходник тестового проекта

Прошу скомпилировать на Вашей платформе
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #6 : Июль 13, 2016, 12:57 »

Попробуйте такой вариант:

Код:
BookMarksDelegate *delegate = new BookMarksDelegate(mBookMarks);
    TreeBookMarks->setItemDelegate(delegate);

//    TreeBookMarks->header()->setStretchLastSection(true);
    TreeBookMarks->setIconSize(QSize(24,24));

    TreeBookMarks->setEditTriggers(QAbstractItemView::NoEditTriggers);
//    TreeBookMarks->setIndentation(10); //отступ слева
    TreeBookMarks->expandAll();

    TreeBookMarks->setColumnWidth(0, WIDTH_BOOKMARKS-24);

    TreeBookMarks->setColumnWidth(1, 24);

    //так будет скрольбар, который мне не нужен
    TreeBookMarks->setFixedWidth(WIDTH_BOOKMARKS + 40);
Записан
rik_mik_
Гость
« Ответ #7 : Июль 13, 2016, 15:09 »

Понятно что если прибавить ширины для QTreeView, то скроля не станет но такой длинный второй столбец тоже не нужен. От кнопки надо максимум 6 пикселей

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Июль 13, 2016, 16:34 »

попробуйте так
Код
C++ (Qt)
 
...
   TreeBookMarks->setItemDelegate(delegate);
 
   TreeBookMarks->header()->setStretchLastSection(false);
   TreeBookMarks->header()->setSectionResizeMode(0, QHeaderView::Stretch);
   TreeBookMarks->setIconSize(QSize(24,24));
...
 
Записан
rik_mik_
Гость
« Ответ #9 : Июль 13, 2016, 16:42 »

попробуйте так
Код
C++ (Qt)
 
...
   TreeBookMarks->setItemDelegate(delegate);
 
   TreeBookMarks->header()->setStretchLastSection(false);
   TreeBookMarks->header()->setSectionResizeMode(0, QHeaderView::Stretch);
   TreeBookMarks->setIconSize(QSize(24,24));
...
 

Спасибо, так все работает
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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