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
변수는 함수가 반환 할 때 범위를 벗어나. 이 문제를 해결하는 좋은 방법은 무엇입니까?
정말요? QT가 이러한 방식으로 객체를 자동으로 관리한다는 것을 알지 못했습니다. 저것을 시도하게하십시오. –
정말 :) : void QTableWidget :: setCellWidget (int 행, int 열, QWidget * 위젯) 위젯의 소유권을 테이블에 전달하여 주어진 행과 열의 셀에 표시 할 주어진 위젯을 설정합니다. 셀 위젯 A가 셀 위젯 B로 대체되면 셀 위젯 A가 삭제됩니다. 예를 들어 아래 코드 스 니펫에서 QLineEdit 객체가 삭제됩니다. AnatolyS와 같은 – AnatolyS
은 동적 할당 메모리 ('new Foo()'와 같은)는 메모리에 남아 있다고 말했습니다. 네 포인터'상자'가 범위를 벗어나면 그것을 사용하지 않으면'상자'가 가리키는 메모리의 주소가 느슨해집니다. – Zaiborg