Important: Please read the Qt Code of Conduct -

Class derivated from QTableView, setcolumnwidth(col,width) doesn't do anything

  • Hi,
    I have an object tableview from a class derivated from QTableView and SetColumnWidth(col,size) doesn't do anything.tableview has always the same size and each column has the same size and I cannot change that with setcolumnwidth.
    Is it because I use a custom delegate to paint one column and in the case of other columns I call ```
    QStyledItemDelegate::paint(painter, option, index);

    What Can I do to change the size of each column ?
    tableview is inside a QGroupbox.and I use here Qt5.6.0.

  • I have put

    else if (role == Qt::SizeHintRole) {
                case 0: return QSize(40,40);
                case 1: return QSize(50,40);
                case 2: return QSize(50,40);
                case 3: return QSize(130,40);
                case 4: return QSize(130,40);
                case 5: return QSize(40,40);
                case 6: return QSize(40,40);

    in the data and Headerdata method of my model class and it is better now because tableview is not too large anymore, but each column has always the same width although....

  • I have put that :

    if (qobject_cast<QHeaderView *>(parent()) != 0)
            if ((index.column()==n_file)||(index.column()==n_execinfo))
            width = 150;
            height =20;
            return QSize(width,height);
            else return QSize(40,20);
        else if (qobject_cast<QTableView *>(parent()) != 0)
            QTableView *v = qobject_cast<QTableView *>(parent());
            width = v->columnWidth(index.column());
            return QSize(width,height);

    in the overloading of the method sizehint of my delegate but it is useless...

  • I think I should use a QTableWidget without delegate and with multiple inheritance to set the width of each column.....

Log in to reply