Обращение к столбцам QTableWidget - PullRequest
0 голосов
/ 11 января 2012

Я студент-программист и строю графический интерфейс на Qt для своей компании. Я пишу функцию-член SetData, которая в основном выступает в качестве посредника между моими элементами пользовательского интерфейса и переменными-членами. В этом конкретном интерфейсе я использую QTableWidge. Я не могу выяснить, как именно установить каждый столбец в переменную.

Например, если в моем QTableWidget есть столбец Name, а Name - первый столбец, я не могу получить к нему доступ, используя традиционные параметры массива. Документация от Qt действительно неясно, как решить эту проблему. Возможно, я все еще слишком любитель, чтобы понять, как использовать функции-члены класса для достижения желаемых результатов.

Чтобы уточнить, я пытаюсь определить тип данных для всего столбца. Например, мой первый столбец; Имя, будет созданная мною переменная типа данных QString. и SetData передаст его в конечном итоге QVector или QList. Вот код, который я набрал до сих пор, чтобы дать представление о том, что я думал, что смогу сделать.

 void InjectionDialog::setData(InjectionData &setDataStruct)
    {
        /*The following setData functions assists in creating a new instance of
          the Injection dialog with whatever values are passed to setDataStruct*/
        QString str;//created str to make datatype conversion
        ui->lineEditFluidVelocity->setText(str.setNum(setDataStruct.lineEditFluidVelocity));
        ui->lineEditFluidMassFlow->setText(str.setNum(setDataStruct.lineEditFluidMassFlow));
    ui->lineEditFluidArea->setText(str.setNum(setDataStruct.lineEditFluidArea));
        ui->lineEditFluidTemperature->setText(str.setNum(setDataStruct.lineEditFluidTemperture));
        ui->lineEditFluidPressure->setText(str.setNum(setDataStruct.lineEditPressure));
        ui->lineEditParticleManual->setText(str.setNum(setDataStruct.lineEditManualParticlesPerCell));
        ui->lineEditParticleVelocity->setText(str.setNum(setDataStruct.lineEditParitcleVelocity));
        ui->lineEditParticleMassFlow->setText(str.setNum(setDataStruct.lineEditParticleMassFlow));
        ui->lineEditParticleArea->setText(str.setNum(setDataStruct.lineEditParticleArea));
        ui->lineEditParticleTemperature->setText(str.setNum(setDataStruct.lineEditParticleTemperture));
        ui->tableWidgetInjectionLocations //this is where I got stuck
}

Я знаю, что QTreeView имеет возможность устанавливать элементы путем делегирования столбцов, но мне нужно, чтобы эти поля можно было редактировать. Я мог бы ошибаться в обработке моего QTableWidget; если да, то я ценю любой совет, как правильно обращаться с этим виджетом.

1 Ответ

0 голосов
/ 12 января 2012

После некоторых исследований и проб и ошибок через QTableWidgetItem; Я нашел то, что искал. Как я уже говорил ранее, мне нужно было написать функцию setData, чтобы обеспечить способ установки каждой ячейки для некоторых указанных данных с использованием QTableWidget. QTableWidget использует setItem , чтобы установить для каждого элемента значение QTableWidgetItem . Зная это, я просто заполнил цель. Вот что я сделал; Это сразу после моего основного кода.

for(int i=0; i<setDataStruct.qTableWidegetlocations.size(); i++)
            {
                QTableWidgetItem *qTableWidgetItemInjectionName = new QTableWidgetItem(setDataStruct.qTableWidegetlocations[i].locationsInjectionName);
                ui->tableWidgetInjectionLocations->setItem(i,0, qTableWidgetItemInjectionName);
                QTableWidgetItem *qTableWidgetItemInjectionOnOff= new QTableWidgetItem((setDataStruct.qTableWidegetlocations[i].locationsInjectionOnOff));
                ui->tableWidgetInjectionLocations->setItem(i,1, qTableWidgetItemInjectionOnOff);
                QTableWidgetItem *qTableWidgetItemInjectionX = new QTableWidgetItem(setDataStruct.qTableWidegetlocations[i].locationsX);
                ui->tableWidgetInjectionLocations->setItem(i,2, qTableWidgetItemInjectionX);
                QTableWidgetItem *qTableWidgetItemInjectionY = new QTableWidgetItem(setDataStruct.qTableWidegetlocations[i].locationsY);
                ui->tableWidgetInjectionLocations->setItem(i,3, qTableWidgetItemInjectionY);
                QTableWidgetItem *qTableWidgetItemInjectionZ = new QTableWidgetItem(setDataStruct.qTableWidegetlocations[i].locationsZ);
                ui->tableWidgetInjectionLocations->setItem(i,4,qTableWidgetItemInjectionZ);
                QTableWidgetItem *qTableWidgetItemInjectionnx = new QTableWidgetItem(setDataStruct.qTableWidegetlocations[i].locationsnx);
                ui->tableWidgetInjectionLocations->setItem(i,5,qTableWidgetItemInjectionnx);
                QTableWidgetItem *qTableWidgetItemInjectionny = new QTableWidgetItem(setDataStruct.qTableWidegetlocations[i].locationsny);
                ui->tableWidgetInjectionLocations->setItem(i,6,qTableWidgetItemInjectionny);
                QTableWidgetItem *qTableWidgetItemInjectionnz = new QTableWidgetItem(setDataStruct.qTableWidegetlocations[i].locationsnz);
                ui->tableWidgetInjectionLocations->setItem(i,7,qTableWidgetItemInjectionnz);
                QTableWidgetItem *qTableWidgetItemInjectionTemperature = new QTableWidgetItem(setDataStruct.qTableWidegetlocations[i].locationsTemperature);
                ui->tableWidgetInjectionLocations->setItem(i,8,qTableWidgetItemInjectionTemperature);
                QTableWidgetItem *qTableWidgetItemInjectionWeight = new QTableWidgetItem(setDataStruct.qTableWidegetlocations[i].locationsWeight);
        }

Спасибо за чтение

...