2010-04-04 4 views

답변

77

삽입 :

QTableWidgetItem *item = new QTableWidgetItem(); 
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); 

작품 잘!

편집 :

QTableWidgetItem *item = new QTableWidgetItem(); 
item->setFlags(item->flags()^Qt::ItemIsEditable); 

이 더 나은 솔루션입니다. @priomsrb에 감사드립니다.

+14

'item-> setFlags (item-> flags()^Qt :: ItemIsEditable);'를 사용하는 것이 좋습니다. 이것은 다른 플래그들을 그대로 남겨 둘 것입니다. – priomsrb

+1

@priomsrb 왜 user2923436에서 제안한 것처럼 item-> flags() & ~ Qt :: ItemIsEditable 대신 배타적 또는 (XOR)을 사용합니까? XOR의 결과는 플래그의 기본 상태에 따라 다릅니다. – m7913d

+0

@ m7913d 당신이 옳다고 생각합니다. 내 솔루션 그냥 편집 가능한 상태를 전환합니다. 항목이 이미 읽기 전용 인 경우 작동하지 않습니다. – priomsrb

27

XOR을 사용한 결과는 현재 상태에 따라 다릅니다.

item->setFlags(item->flags() & ~Qt::ItemIsEditable); 

을 사용하여 현재 설정에 관계없이 편집이 꺼져 있는지 확인하시기 바랍니다.

+0

나는이 해결책을 시도했지만 작동하지 않았다. 컴파일러가 '~'에 대해 불평했다. – Momergil

0

@ Narek의 코드를 행이나 열에 적용하려면 간단한 for 루프를 사용하고 편집 할 수없는 행/열에 플래그를 포함시키는 조건을 넣으면됩니다.

다음 코드는 QTableWidget에 csv 파일을 읽어

if(!rowOfData.isEmpty()){ 
for (int x = 0; x < rowOfData.size(); x++) 
    { 
     rowData = rowOfData.at(x).split(","); 
     if(ui->table_Data->rowCount() <= x) ui->table_Data->insertRow(x); 
     for (int y = 0; y < rowData.size(); y++) 
     { 
      QTableWidgetItem *item = new QTableWidgetItem(rowData[y],QTableWidgetItem::Type); 
      if(y < 3) item->setFlags(item->flags()^Qt::ItemIsEditable); // Only disables the first three columns for editing, but allows the rest of the columns to be edited 
      ui->table_Data->setItem(x,y,item); 
      ui->table_Data->repaint(); 
     } 
    } 
} 
0

난 그냥 새로운 슬롯에 cellDoubleClicked 신호를 덮어, 더 나은 제안에왔다. 셀을 수정하지 않으려면이 옵션을 사용하십시오.

+0

그렇게 할 필요가 없으므로 항목 플래그가있는 것입니다. 그의 문제를 해결하기위한 한 줄. – reggie

+0

차이점은 모든 하위 항목의 비트 맵에서 플래그를 제외해야한다는 것입니다. 내 제안은 전체 위젯을 읽기 전용으로 원한다면 & ~ bitmap 플래그를 사용하여 20 줄을 작성하지 않는 것입니다. 사실 내 의견은 어쨌든 틀렸어. cellDoubleClicked 신호의 연결을 끊어야한다고 말해야한다. – Damdidam

관련 문제