Program Tip

QTableWidget에서 열을 읽기 전용으로 만드는 방법은 무엇입니까?

programtip 2020. 12. 7. 20:35
반응형

QTableWidget에서 열을 읽기 전용으로 만드는 방법은 무엇입니까?


나는 한 열 싶은 QTableWidget NOT 편집을.
포럼에서 나는 일부에 대해 많이 읽었 flags지만 구현할 수 없었습니다.


다음과 같은 종류의 항목을 QTableWidget에 삽입하십시오.

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

잘 작동합니다!

편집하다:

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

이것이 더 나은 해결책입니다. @priomsrb에게 감사드립니다.


XOR 사용 결과는 현재 상태에 따라 다릅니다. 나는 사용하는 것이 좋습니다

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

현재 설정에 관계없이 편집이 꺼져 있는지 확인합니다.


더 나은 제안을 찾았습니다. cellDoubleClicked 신호를 새 SLOT으로 덮어 씁니다. 이것은 셀을 수정하지 않으려는 경우입니다.


@Narek의 코드를 행 또는 열에 적용하려면 간단한 for 루프를 사용하고 편집하지 않으려는 행 / 열에 대한 플래그를 포함하는 조건을 입력하면됩니다.

다음 코드는 csv 파일을 QTableWidget으로 읽습니다.

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();
        }
    }
}

참고 URL : https://stackoverflow.com/questions/2574115/how-to-make-a-column-in-qtablewidget-read-only

반응형