Последний пустой столбец для заполнения QTableView

В QTableView мне нужно, чтобы последний (самый правый) столбец был пустым, расширяемым, но не перемещаемым. Цель состоит в том, чтобы таблица не заканчивалась внезапно (ибо я использую альтернативный цвет для строк) или некрасиво расширялась вправо. В QHeaderView есть setFirstSectionMovable(bool); Мне нужно что-то подобное для последнего раздела, позволяя остальным подвижным. (другими словами: заполните остальную часть таблицы пустым столбцом не перемещаемый). Любая подсказка, как этого добиться?

Я переопределил mousePressEvent() в подклассе QHeaderView, чтобы пропустить последний раздел, но его все равно можно переместить, переместив другой столбец на его место, и я не знаю, как это предотвратить.


person WorkingClassHero    schedule 07.11.2020    source источник
comment
Вы пытались переделать moveSection()? doc.qt.io/qt-5/qheaderview.html#moveSection   -  person Ngoc Minh Nguyen    schedule 08.11.2020


Ответы (1)


AMOQ:

Быть HeaderView подклассом QHeaderView и иметь

setSectionsMovable(true);
setStretchLastSection(true);

Обработайте сигнал sectionMoved:

connect(this, &QHeaderView::sectionMoved, [this](int, int, int newVisual) {                
  if(newVisual == count()-1) { moveSection(newVisual, newVisual-1); }
});

Переопределить mousePressEvent:

void HeaderView::mousePressEvent(QMouseEvent* event) {    
int logicalIdx = logicalIndexAt(event->pos());       
if(logicalIdx != count()-1) { QHeaderView::mousePressEvent(event); }
}
person WorkingClassHero    schedule 09.11.2020