调整QTableWidget中列的大小

Resizing columns in a QTableWidget

本文关键字:QTableWidget 调整      更新时间:2023-10-16

我正在开发一个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。使用调试模式,我看到如果width < totalPoints为真,变量point等于0。例如,如果width = 762point应该是0.762,但它是0

看起来程序会自动舍入double值。为什么?我做错了什么?

也许有更好的方法来完成我的任务(使用百分比列宽度在QTableWidget)?

widthtotalPoints都是整数。所以你在这里得到一个整数除法,当width < totalPoints .

将其中一个强制转换为double:

double point = width / (double) totalPoints;