2014-12-12 2 views
1

이것은 나를 괴롭 히고 있습니다. 여기에 관련 코드가있다 :QT QTableWidget :: item()은 위젯이 할당되어 있어도 nullptr을 반환합니다.

//Inside UI class 
QTableWidget *table_view; 

나중에

QLabel* lb_param_id = new QLabel(this); 
lb_param_id->setText(QString::number(param_id)); 

QLabel* lb_param_name = new QLabel(this); 
lb_param_name->setText(QString(param_name)); 

QLineEdit* te_value = new QLineEdit(this); 
te_value->setText(QString(value)); 

QPushButton* pb_command = new QPushButton(); 
pb_command->setText("Change"); 

... 

if(ui->table_view->rowCount() <= param_id) 
    ui->table_view->setRowCount(param_id + 1); 

ui->table_view->setCellWidget(param_id, 0, lb_param_id); 
ui->table_view->setCellWidget(param_id, 1, lb_param_name); 
ui->table_view->setCellWidget(param_id, 2, te_value); 
ui->table_view->setCellWidget(param_id, 3, pb_command); 

for(int i =0; i < ui->table_view->rowCount(); ++i) 
{ 
    for(int j = 0; j < ui->table_view->columnCount(); ++j) 
    { 
     QTableWidgetItem* item = ui->table_view->item(i, j); 

     //Here, item is nullptr. Why? 
     item->setForeground(QColor::fromRgb(255,255,255)); 
    } 
} 

나는 위젯을 설정 한 다음 QTableWidget 내부의 모든 위젯의 전경을 변경하려고합니다. 그러나 ui->table_view->item()에서 반환되는 값은 nullptr입니다. 여기서 무슨 일이 일어나고있는거야? btw, 열 수는 초기화시 설정됩니다.

+0

'param_id '의 값은 무엇입니까? –

+0

'param_id'는 0입니다. 적어도 현재는. – nakiya

+0

테이블에서 항목 ('QTableWidgetItem')을 가져오고 싶지만 항목을 추가하는 위치가 표시되지 않습니다. 'setCellWidget()'함수는 ** 항목 **을 테이블에 추가하지 않습니다. – vahancho

답변

0

다음 몇 줄의 코드를 추가하십시오.

if(ui->table_view->rowCount() <= param_id) 
    ui->table_view->setRowCount(param_id + 1); 

ui->table_view->setColumnCount(4); 

ui->table_view->setItem(param_id, 0, new QTableWidgetItem()); 
ui->table_view->setItem(param_id, 1, new QTableWidgetItem()); 
ui->table_view->setItem(param_id, 2, new QTableWidgetItem()); 
ui->table_view->setItem(param_id, 3, new QTableWidgetItem()); 

ui->table_view->setCellWidget(param_id, 0, lb_param_id); 
... 

기본적으로 위젯을 설정하기 전에 셀에 데이터를 삽입해야합니다. 귀하의 경우, 귀하는 완전한 데이터를 의미하지는 않습니다.

void QTableWidget::setCellWidget(int row, int column, QWidget *widget) 
    { 
     QModelIndex index = model()->index(row, column, QModelIndex()); 
     QAbstractItemView::setIndexWidget(index, widget); 
    } 

을 먼저 셀을 설정하지 않고, 모델 인덱스가 유효하지 않은 인덱스 : Qt의 소스를 검사

, 이것은이 setCellWidget()가 imaplemented 방법이다. 반환 된 인덱스가 유효하지 않으면 Qt는 데이터를 삽입해야합니다. 지금은 Qt 코드로 작업해야합니다.

관련 문제