Я разрабатываю приложение 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
)?
И то и другое width
а также totalPoints
целые числа. Таким образом, вы получите целочисленное деление там, и это приведет к нулю всякий раз, когда width < totalPoints
,
Приведите одного из них к double
:
double point = width / (double) totalPoints;
Других решений пока нет …