【问题标题】:Qt hide column in QTableViewQTableView中的Qt隐藏列
【发布时间】:2013-09-30 20:51:06
【问题描述】:

我想隐藏QtableView 中的ID 列,但我无法在我的实现中这样做。谁能帮帮我?

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++;
}

}

【问题讨论】:

    标签: c++ qt qtableview


    【解决方案1】:

    你使用ui-&gt;tableView-&gt;setColumnHidden(6, true);,但没有索引为6的列。你应该写ui-&gt;tableView-&gt;setColumnHidden(5, true);,因为ID列号是5而不是6。

    更新:

    在将模型设置为视图后,您还需要隐藏列,即:

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

    【讨论】:

      【解决方案2】:

      另一种方法是将指定列的宽度设置为零:ui-&gt;tableView-&gt;setColumnWidth(col,0);ui-&gt;tableWidget-&gt;setColumnWidth(col,0);

      【讨论】:

      • 我更喜欢这种方法,因为不会更改列顺序。这保持了按列号访问单元格项目的可能性。
      猜你喜欢
      • 2012-12-12
      • 2011-09-15
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      相关资源
      最近更新 更多