Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: rik_mik_ от Июль 12, 2016, 16:14



Название: ширина колонок и скрольбар QTreeView
Отправлено: 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 столбец он становиться больше чем требуется
Что я не так делаю ??



Название: Re: ширина колонок и скрольбар QTreeView
Отправлено: PimenS от Июль 12, 2016, 16:21
Доброго времени суток.
Объясните что не так делаю.

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


чем плох void QWidget::setFixedWidth(int w)?


Название: Re: ширина колонок и скрольбар QTreeView
Отправлено: rik_mik_ от Июль 12, 2016, 16:32
Цитировать
чем плох void QWidget::setFixedWidth(int w)?
Можно так, разницы не наблюдаю.
Суть вопроса как сделать фиксированную ширину колонок в qtreeview и фиксированную ширину самого qtreeview, чтобы не было горизонтального скрольбара и
самое главное не было съезжания отображения дерева влево при нажатии на второй столбец (это съезжание связано с тем что "фокус" скролбара наводиться на второй столбец)


Название: Re: ширина колонок и скрольбар QTreeView
Отправлено: PimenS от Июль 12, 2016, 16:48
Может у вас где-то задействован void QTreeView::resizeColumnToContents(int column)?

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



Название: Re: ширина колонок и скрольбар QTreeView
Отправлено: rik_mik_ от Июль 13, 2016, 11:51
Во  скрины моего проекта



Название: Re: ширина колонок и скрольбар QTreeView
Отправлено: rik_mik_ от Июль 13, 2016, 11:53
а вот исходник тестового проекта

Прошу скомпилировать на Вашей платформе


Название: Re: ширина колонок и скрольбар QTreeView
Отправлено: PimenS от Июль 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);


Название: Re: ширина колонок и скрольбар QTreeView
Отправлено: rik_mik_ от Июль 13, 2016, 15:09
Понятно что если прибавить ширины для QTreeView, то скроля не станет но такой длинный второй столбец тоже не нужен. От кнопки надо максимум 6 пикселей



Название: Re: ширина колонок и скрольбар QTreeView
Отправлено: Igors от Июль 13, 2016, 16:34
попробуйте так
Код
C++ (Qt)
 
...
   TreeBookMarks->setItemDelegate(delegate);
 
   TreeBookMarks->header()->setStretchLastSection(false);
   TreeBookMarks->header()->setSectionResizeMode(0, QHeaderView::Stretch);
   TreeBookMarks->setIconSize(QSize(24,24));
...
 


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

Спасибо, так все работает