我正在开发一个QTableWidget
用于显示数据的 C++ Qt 应用程序。
据我所知,QTableWidget
为列提供自动调整大小模式:调整最后一个。
这种方法不适合我的任务,所以我编写了继承自QTableWidget
withresizeEvent
函数的新类:
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
)?