Изменение размера столбцов в QTableWidget

Я разрабатываю приложение C ++ Qt, которое использует QTableWidget показать данные.

Насколько я знаю, QTableWidget обеспечивает автоматический режим изменения размера столбцов: изменение размера последнего.

Этот подход не подходит для моей задачи, поэтому я написал новый класс, унаследованный от QTableWidget с resizeEvent функция:

MyTableWidget::MyTableWidget ( std::vector<int> columnsRelWidth )
{
//columnsRelWidth contains relative width of each column in the table

this->columnWidth = columnsRelWidth;
}

void MyTableWidget::resizeEvent ( QResizeEvent *event )
{
QSize newSize = event->size();
int totalPoints = 0; //total points of relative width
for ( int x = 0; x < this->columnWidth.size(); ++x )
{
totalPoints += this->columnWidth[x];
}
int width = newSize.width();
double point = width / totalPoints; //one point of relative width in px
for ( int x = 0; x < this->columnCount(); ++x )
{
this->setColumnWidth ( x, ( this->columnWidth[x] * point ) );
}
}

Я добавил 4 столбца и установил следующие значения относительной ширины (их сумма 1000):

| First column | Second column | Third column | Fourth column |
|     100      |      140      |     380      |      380      |

Тем не менее, я не вижу столбцов в таблице, пока ширина таблицы не станет меньше 1000.
Используя режим отладки, я увидел эту переменную point равно 0 если width < totalPoints правда. Например, если width равно 762, point должно быть 0,762, но это 0.

Похоже, программа автоматически округляет double значение. Зачем? Что я делаю неправильно?

Может быть, есть лучшие способы выполнить мою задачу (используйте ширину столбцов в процентах в QTableWidget)?

1

Решение

И то и другое width а также totalPoints целые числа. Таким образом, вы получите целочисленное деление там, и это приведет к нулю всякий раз, когда width < totalPoints,

Приведите одного из них к double:

double point = width / (double) totalPoints;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]