MyTetra Share
Делитесь знаниями!
Как в Qt быстро увеличить расстояние между строками для QListView, QTableView, QTreeView
Время создания: 01.12.2021 17:11
Автор: xintrea
Текстовые метки: qt, QListView, QTableView, QTreeView, расстояние, размер, вертикальный, высота, строка, элемент
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Принципы написания кода
Запись: xintrea/mytetra_syncro/master/base/1638367901xglosxajaf/text.html на raw.github.com

Самый простой и быстрый способ увеличить вертикальный размер элемента списка, таблицы или дерева в соответсвующих виджетах QListView, QTableView, QTreeView - это создать класс делегата, а в нем переопределить метод sizeHint().


Делается это следующим образом:



Заголовок:



#include <QItemDelegate>


class HelpDelegate : public QItemDelegate

{

Q_OBJECT


public:

HelpDelegate(QObject *parent = nullptr);


virtual QSize sizeHint(const QStyleOptionViewItem &option,

const QModelIndex &index) const override;

};



Реализация:



#include "help_delegate.h"


HelpDelegate::HelpDelegate(QObject *parent) : QItemDelegate(parent)

{


}


QSize HelpDelegate::sizeHint(const QStyleOptionViewItem &option,

const QModelIndex &index) const

{

QSize size=QItemDelegate::sizeHint(option, index);


size.setHeight(28); // Принудительная установка высоты делегата


return size;

}



После чего делегат подключается к виду:



ui->treeView->setItemDelegate( new HelpDelegate( ui->treeView ) );



Этот метод хорош тем, что размер элемента и выбираемая мышкой область элемента будут абсолютно совпадать, и вертикальная область элемента будет протягиваться ровно до границы, где начинается область другого элемента.


Если же попытаться решить эту же задачу путем применения для элемента прозрачной иконки размером 1 x h пикселей (где h - это целевой размер элемента), то визуально эффект будет практически тот же самый, но ровно до того момента, пока к элементу не будет подведена мышка. Окажется, что расстояние между элементами увеличилось, а вот вертикальный размер элемента остался прежним.


Если задача увеличения вертикального размера элемента исходила из того, чтобы в элемент было легче попадать мышкой, то она может быть правильно решена именно первым способом а не использованием невидимой иконки. Тем более что такое решение через иконку не позволить использовать иконки возле элемента в своем первоначальном назначении.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования