Qt hide column in QTableView

34,811

Solution 1

You use ui->tableView->setColumnHidden(6, true);, but there is no column with index 6. You should write ui->tableView->setColumnHidden(5, true); instead, because ID column number is rather 5 than 6.

UPDATE:

You also need to hide column(s) after you set the model to the view, i.e:

ui->tableView->setModel(model);
ui->tableView->setColumnHidden(5, true);

Solution 2

Another approach is set specified column's width to zero : ui->tableView->setColumnWidth(col,0); ui->tableWidget->setColumnWidth(col,0);.

Share:
34,811

Related videos on Youtube

laura
Author by

laura

Updated on July 13, 2021

Comments

  • laura
    laura almost 3 years

    I want to hide the ID column in the QtableView and i can't do that on my implementation. Can anyone help me?

    void MainWindow::on_actionClear_Search_triggered()
    {
    model = new QStandardItemModel(cars.size(),6,this);
    //create header
    createHeader(model);
    //set data to the table view
    populate(cars);
    
    ui->tableView->setColumnHidden(6,true);
    ui->tableView->setModel(model);
    
    
    }
    
    void MainWindow::createHeader(QStandardItemModel *model){
    
    
    model->setHorizontalHeaderItem(0,new QStandardItem("Car"));
    model->setHorizontalHeaderItem(1, new QStandardItem("Type"));
    model->setHorizontalHeaderItem(2, new QStandardItem("Mileage"));
    model->setHorizontalHeaderItem(3, new QStandardItem("Year"));
    model->setHorizontalHeaderItem(4, new QStandardItem("Is registered"));
    model->setHorizontalHeaderItem(5, new QStandardItem("ID"));
    }
    
    void MainWindow::populate(const QList<Vehicle> &vehicles)
    {
    int j = 0;
    QList<Vehicle>::ConstIterator iter;
    for( iter= vehicles.begin(); iter != vehicles.end(); iter++){
        const Vehicle& car = *iter;
        //set car
        QString makeAndModel = car.getGeneralData().getMake() + car.getGeneralData().getModel();
        QStandardItem *mAndM = new QStandardItem(QString(makeAndModel));
        mAndM->setEditable(false);
        model->setItem(j,0,mAndM);
    
        //set type
        QStandardItem *type = new QStandardItem(QString(car.getGeneralData().getType()));
        type->setEditable(false);
        model->setItem(j,1,type);
    
        //set mileage
        QString mileageString = QString::number(car.getGeneralData().getMileage());
        QStandardItem *mileage = new QStandardItem(QString(mileageString));
        mileage->setEditable(false);
        model->setItem(j,2,mileage);
    
        //set year
        QString yearString = QString::number(car.getGeneralData().getYear());
        QStandardItem *year = new QStandardItem(QString(yearString));
        year->setEditable(false);
        model->setItem(j,3,year);
    
        //set registration
        QString regString = VehicleHelper::convertBoolToString(car.getRegistration().isRegistered());
        QStandardItem *regDate = new QStandardItem(QString(regString));
        regDate->setEditable(false);
        model->setItem(j,4,regDate);
    
    
        //set ID column
        QStandardItem *idNumber = new QStandardItem(QString(car.getVehicleID().getID()));
        idNumber->setEditable(false);
        model->setItem(j,5,idNumber);
        j++;
    }
    
    }
    
  • Katte
    Katte almost 3 years
    I prefer this approach because not change the column order. This maintain the possibility to access cell items by column number.