2016-07-10 8 views
0

| Name | Math | Physics | Average grade |
| | | | |
| | | | |
| | | | |
| | | | |
비활성화 편집 및 setItem은

  1. | | | | |
    | | | | |

    열 "수학"과 "물리학은"사용자입니다 숫자를 넣으려면 열 "average "값을 넣을 수 없습니다. 사용자가"수학 "및"물리학 "등급을 입력 한 후에 평균 값을 표시하기위한 것입니다. 편집을 비활성화 할 수 있지만 계산 된 값을 "평균"열로 표시 할 수 있습니까?

  2. 나는 여러 행에 내용을 쓰고 싶어하지만, 내 코드는

    ui->tableWidget->setColumnCount(4); 
    ui->tableWidget->setRowCount(8); 
    ui->tableWidget->setSortingEnabled(false); 
    QTableWidgetItem *newItem = new QTableWidgetItem(tr("Hello World")); 
    for (int i=0; i< ui->tableWidget->rowCount(); i++) 
        ui->tableWidget->setItem(i, 0, newItem); 
    

나는 여전히 때문에 이해하지 못하는이

QTableWidget: cannot insert an item that is already owned by another QTableWidget 

과 같은 메시지가 작동하지 않습니다 나는 QT를 가진 초보자이다. 도와주세요, 많은 감사합니다! :)

코드 업데이트 : 당신은 QTableWidgetItem::setFlags()을 사용할 수 있습니다

for (int i = 0; i < ui.tableWidget->rowCount(); i++) { 
    QTableWidgetItem *icon_item = new QTableWidgetItem; 
    QIcon icon(":/myproject/icon/test.png"); 
    icon_item->setIcon(icon); 
    ui.tableWidget->setItem(i, 0, icon_item); 
} 

for (int j = 0; j < ui.tableWidget->rowCount(); j++) { 
    ui.tableWidget->item(j, 3)->setFlags(ui.tableWidget->item(j, 3)->flags() & ~Qt::ItemIsEditable); 
} 

답변

2
  1. . 다른 기본 플래그를 유지하지만, Qt::ItemIsEditable를 제거하려면 :

    item->setFlags(item->flags() & ~Qt::ItemIsEditable); 
    
  2. 을 여러 셀에 같은 QTableWidgetItem 인스턴스를 설정할 수 없습니다. 당신이 시작하려면 :

    for (...) { 
        QTableWidgetItem *item = new QTableWidgetItem(...); 
        tableWidget->setItem(...); 
    } 
    
+0

덕분에 많이. 귀하의 두 번째 솔루션은 나를 위해 잘 작동합니다. 그러나 액세스 위반 때문에 첫 번째 작동하지 않습니다. 내 코드는 'for (int i = 0; i rowCount(); i ++) { ui.tablewidget-> item (i, 3) -> setFlags (ui.tablewidget-> item i, 3) -> flags() & ~ Qt :: ItemIsEditable); }' 내가 디버그 할 때 4로 실행하면 액세스 위반이 발생합니다. ( – gnase

+0

그 셀/열에 setItem()을 호출하지 않았으므로 아마도 널 포인터를 역 참조하는 것입니다. – jpnurmi

+0

그래서 어떻게해야합니까? (미안, 나는 초보자이다.) – gnase