2013-03-20 2 views
0

QT UI에서 사용자가 각 셀에 double을 추가 할 수있는 QTableWidget을 만들어야합니다.QTableWidget에 넣기 전에 QWidget 수정

테이블에는 네 개의 열이 있습니다. 첫 번째 열은 0-255의 값이고 두 번째 열은 네 번째 열로, 각각 0-1.0의 RGB 값입니다.

void MainWindow::InitializeColorTable(){ 
     QTableWidget *tableColor = ui->tableColor; 
     tableColor->setRowCount(4); 
     tableColor->setColumnCount(4); 

    tableColor->setHorizontalHeaderLabels(QStringList() << 
     tr("Value") << tr("R") << tr("G") << tr("B")); 
    for (int row = 0; row < tableColor->rowCount(); ++row){ 
     tableColor->setCellWidget(row, 0, new QDoubleSpinBox(tableColor)); 
     tableColor->setCellWidget(row, 1, new QDoubleSpinBox(tableColor)); 
     tableColor->setCellWidget(row, 2, new QDoubleSpinBox(tableColor)); 
     tableColor->setCellWidget(row, 3, new QDoubleSpinBox(tableColor)); 
    } 
} 

나는 같은 설정 초기 값과 정의 범위로 내 QDoubleSpinBox 객체의 속성을 수정할. 그러나, 나는 이것을 어떻게하는지 잘 모릅니다. 내 InitializeColorTable 기능에

QDoubleSpinBox *box = new QDoubleSpinBox; 
box->setValue(0); 
box->setRange(0, 255); 
tableColor->setCellWidget(row, 0, box); 

같은 QDoubleSpinBox 객체를 생성하는 경우, box 변수는 함수가 반환 할 때 범위를 벗어나. 이 문제를 해결하는 좋은 방법은 무엇입니까?

답변

1

왜 상자 (QDoubleSpinBox * 상자 = 새 QDoubleSpinBox;)가 범위를 결정합니까? 이것은 setCellWidget 후에 tableColor의 자식이 될 동적 객체입니다 (이 객체에 대한 포인터 만 범위를 벗어납니다). 그러므로 걱정하지 마십시오.

+0

정말요? QT가 이러한 방식으로 객체를 자동으로 관리한다는 것을 알지 못했습니다. 저것을 시도하게하십시오. –

+0

정말 :) : void QTableWidget :: setCellWidget (int 행, int 열, QWidget * 위젯) 위젯의 소유권을 테이블에 전달하여 주어진 행과 열의 셀에 표시 할 주어진 위젯을 설정합니다. 셀 위젯 A가 셀 위젯 B로 대체되면 셀 위젯 A가 삭제됩니다. 예를 들어 아래 코드 스 니펫에서 QLineEdit 객체가 삭제됩니다. AnatolyS와 같은 – AnatolyS

+0

은 동적 할당 메모리 ('new Foo()'와 같은)는 메모리에 남아 있다고 말했습니다. 네 포인터'상자'가 범위를 벗어나면 그것을 사용하지 않으면'상자'가 가리키는 메모리의 주소가 느슨해집니다. – Zaiborg

관련 문제