QTableView具有不同的列宽

时间:2015-12-24 04:23:52

标签: c++ qt size qtableview qabstracttablemodel

我在应用程序中有一个QTableView宽度QAbstractTableModel,我希望通过调整大小选项ui->tableView->horizontalHeader()->setSectionResizeMode (QHeaderView::Stretch);

使每列的宽度不同

在我的模型中,我做了:

    class rangeModel : public QAbstractTableModel {
    //other code ....... 

    QVariant rangeModel::headerData(int section, Qt::Orientation orientation, int role) const
    {
        if (orientation != Qt::Horizontal) 
            return QVariant();
        if (role != Qt::DisplayRole && role != Qt::SizeHintRole) 
            return QVariant();
        if(role == Qt::SizeHintRole) 
        {
           switch (section) {
              case 0: return QSize(58, 20);
              case 1: return QSize(58, 20);
              case 2: return QSize(58, 20);
              case 3: return QSize(228, 20);
           }
        }
        switch (section) {
            case 0: return "PREFIXMIN";
            case 1: return "PREFIXMAX";
            case 2: return "VALUE";
            case 3: return "PROGRESS BAR";
            default: return QVariant();
        }
    }

所以我希望我的行的大小不同,但它不会发生,视图由于某种原因忽略了QSizeHint,即使没有{{1}也不会有效} 选项。如何使列和标题的大小不同?

1 个答案:

答案 0 :(得分:1)

您可能想要使用它:

 ui->tableView->resizeColumnsToContents();//resize all the columns based on longest data in every column. 

但是如果你真的打算用你在代码中使用的宽度值完全调整它们的大小:

ui->tableView->horizontalHeader()->setSectionResizeMode (QHeaderView::Stretch);
ui->tableView->setColumnWidth(0,58);
ui->tableView->setColumnWidth(1,58);
ui->tableView->setColumnWidth(2,58);
ui->tableView->setColumnWidth(3,228);