4
나는 QVector cars
을 차의 등록 번호를 기준으로 필터링하려고합니다. 새로운 필터링 된 벡터를 만들고 싶습니다. 저는 두 벡터를 반복하고 있기 때문에 이것은 괜찮다고 생각하지 않습니다. 첫 번째 벡터에서 두 번째 벡터로 복사하기 때문입니다. 이 일을 제대로하고 있습니까?QTableView를 모델로 사용하기
void MainWindow::on_actionBy_registration_number_triggered()
{
myDialog = new MyDialog(this);
myDialog->exec();
QString toSearchString = myDialog->getRegistrationNumber();
QVector<Vehicle> founded;
QVectorIterator<Vehicle> iterator(cars);
while(iterator.hasNext()){
Vehicle car = iterator.next();
QString num = car.getRegistration().getRegistrationNumber();
if(num.contains(toSearchString,Qt::CaseInsensitive)){
founded.append(car);
}
}
model = new QStandardItemModel(founded.size(),5,this);
//create header
createHeader(model);
int j = 0; //row
QVectorIterator<Vehicle> iter(founded);
while(iter.hasNext()){
Vehicle output = iter.next();
//set car
QString makeAndModel = output.getGeneralData().getMake() + output.getGeneralData().getModel();
QStandardItem *mAndM = new QStandardItem(QString(makeAndModel));
model->setItem(j,0,mAndM);
//set type
QStandardItem *type = new QStandardItem(QString(output.getGeneralData().getType()));
model->setItem(j,1,type);
//set mileage
QString mileageString = QString::number(output.getGeneralData().getMileage());
QStandardItem *mileage = new QStandardItem(QString(mileageString));
model->setItem(j,2,mileage);
//set year
QString yearString = QString::number(output.getGeneralData().getYear());
QStandardItem *year = new QStandardItem(QString(yearString));
model->setItem(j,3,year);
//set registration
QString regString = VehicleHelper::convertBoolToString(output.getRegistration().isRegistered());
QStandardItem *regDate = new QStandardItem(QString(regString));
model->setItem(j,4,regDate);
j++;
}
ui->tableView->setModel(model);
ui->tableView->setEnabled(false);
}
당신이 조기 최적화를하지 말아야 할 생각입니다. Vehice 클래스가 COW 동작을 구현하면 모두 OK입니다. 제안 만 - QVector 대신 QList 클래스를 사용할 수 있습니다. 그것은 명시 적 값 대신 데이터 유형에 대한 포인터를 유지하기 때문에 귀하의 경우에 더 유용합니다. –