Код выглядит следующим образом:
Код: Выделить всё
void DDUTableView::resizeEvent(QResizeEvent* ev)
{
int num_columns = NUM_ELEMENTS(COLUMN_WIDTHS);
if (num_columns > 0) {
int width = ev->size().width();
int used_width = 0;
// Set our widths to be a percentage of the available width
for (int i = 0; i < num_columns - 1; i++) {
int column_width = (width * COLUMN_WIDTHS[i]) / 100;
this->setColumnWidth(i, column_width);
used_width += column_width;
}
// Set our last column to the remaining width
this->setColumnWidth(num_columns - 1, width - used_width);
}
// Call our base resizeEvent to handle the vertical resizing which
// we don't bother with here
QTableView::resizeEvent(ev);
}
Я могу решить эту проблему, подключившись к сигналуsectionResized() в заголовке таблицы и установить таймер. Если resizeEvent() вызывается, когда таймер активен, я не пересчитываю ширину таблицы.
Код ниже:
Код: Выделить всё
connect(horizontalHeader(), SIGNAL(sectionResized(int, int, int)), this, SLOT(slotSectionResized(int, int, int)));
void DDUTableView::slotSectionResized(int /*logicalIndex*/, int /*oldSize*/, int /*newSize*/)
{
timer_->start(500);
}
void DDUTableView::resizeEvent(QResizeEvent* ev)
{
if (timer_->isActive()) {
return;
}
// etc
Могу ли я запретить вызов resizeEvent(), если пользователь вручную настраивает столбец заголовки выходят за рамки области просмотра? В качестве альтернативы, если нет, можно ли определить в resizeEvent(), произошла ли эта конкретная ситуация, без необходимости устанавливать таймеры и тому подобное?
Подробнее здесь: https://stackoverflow.com/questions/261 ... esizeevent
Мобильная версия