2013-07-11 2 views
0

메인 윈도우 클래스에 QTableWidget이 있습니다. 지정한 셀의 텍스트 변경을 취소하는 기능을 찾을 수 없습니다. 내가하고 싶은 것입니다 :Qt에서 QTableWidget의 개별 셀을 실행 취소 하시겠습니까?

void myCellUndoFunc(int row, int col) 
    { 
     table->item(row, col)->undo(); //table is my QTableWidget 
    } 

문제는 그러한 취소가 없다는 것입니다(). 내 질문은, 어쩌면 일부 foo-doo 신호 조합의 & SLOT의 조합을 사용하여이 문제에 대한 해결 방법이있을 수 있습니까?

감사합니다.

추신 : 내 응용 프로그램에서 QTableWidget을 광범위하게 사용했기 때문에 Model/View 프레임 워크를 사용하지 마십시오. 죄송합니다.

+0

너무 많은 메모리를 소비 할 수 있지만, 세포의 상태. 실행 취소하려는 경우 상단 스택 값을 팝업하고 셀을 상단에 놓습니다. –

+0

@Muckle_ewe, 그게 내가 현재하고있는 것과 행복하지 않은 것입니다. 그것이 내가이 질문을 한 이유입니다. –

+0

알겠습니다. 그런 경우에는 어떻게 할 수 있는지 완전히 확신하지 못합니다. 아마도 이미 알고있을 것입니다.하지만 스택 접근 방식을 결정한다면 QUndoStack 클래스가 있습니다. 실행 취소 슬롯도 있으므로 최소한의 추가 코딩으로 신호 슬롯 방식을 사용할 수 있습니다. http://qt-project.org/doc/qt-4.8/qundostack.html –

답변

1

어쩌면 당신은 당신이 마지막 값을 지정할 수 있습니다 UserRoleQt는을 :: 사용하여

void QTableWidgetItem::setData (int role, const QVariant & value) [virtual] 

를 사용해야합니다. 귀하의 방법에서 u는 이전에 설정 한 값을 data() - Method로 액세스 할 수 있습니다. 당신이해야 할 유일한 일은 항상 오래된 가치를 최신 상태로 유지하는 것입니다.

당신은 QTableWidgetItem

tw->setData(Qt::UserRole, tw->text())

의 새 값을 설정하고 "TW"는 사용하여 현재 QTableWidgetItem입니다 취소에 유보다

tw->setText(tw->data(Qt::UserRole).toString())

으로 데이터를 검색 할 수 있기 전에 컨텍스트 메뉴 이벤트, 클릭 이벤트 또는 원하는 모든 것. QTableWidgetItem을 서브 클래스 화하여 클래스에서 내부적으로이 모든 것을 처리하여 undo() - 메소드를 작성하고 이전 값을 저장하는 등의 작업을 수행 할 수 있습니다.

+0

나는 당신이 말하는 것을 얻지 못하고 있습니다. 어쩌면 코드를 보여줄 수 있을까요? –

+0

@Cool_Coder가 예제를 추가했습니다. 희망이 도움이됩니다. – Trashed

+0

SLOT에 연결하기 위해 어떤 신호를 사용해야하는지 설명해주십시오. cellchanged()가 발생하면 항목의 텍스트가 이미 수정되어 이전 텍스트를 가져올 수 없습니다. –

관련 문제