2014-09-11 8 views
0

값 액세스 등 QSpinBoxes :Qt를 QTableWidget QDoubleSpinBoxes/요소들은 I 개의 행과 열로 된 테이블을 생성하여 반복

enter image description here

번째 열 요소 spinBoxes 등을 포함한다.

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    myTable = ui->tableWidget; 

for(int i = 0; i < myTable->rowCount(); i++) 
    { 
     QDoubleSpinBox *spinBox = new QDoubleSpinBox(this); 
     spinBox->setValue(i + 1); 
     myTable->setCellWidget(i, 1, spinBox); 
    } 
} 

myTableMainWindow의 멤버로 선언 : 코드는 다음과 같다.

은 일반적으로 단지 SpinBoxes의 값을 통해 액세스 할 수 있습니다 :

ui->spinBox->value(); 

하지만이 여기에 작동하지 않습니다.

SpinBoxes의 값에 액세스하려면 QTableWidget의 항목으로 사용합니까? 반복을 통해 SpinBoxes에 액세스하려고하므로 for 루프를 사용하여 모든 스핀 상자를 반복합니다.

+0

myTable을 사용한 것뿐만 아니라 메인 윈도우 멤버 변수로'QDoubleSpinBox * spinBox'를 선언하십시오. – vahancho

+0

Ja하지만 문제는 반복하여 스핀 상자의 값에 액세스하는 것이 최종 목표라는 것입니다. 그래서 for 루프를 사용하여 값을 읽을 수있는 방법을 찾고 있습니다. – newandlost

답변

2

테이블 위젯은 items과 작동합니다. 각 셀은 하나의 항목을 나타냅니다 (2 행 x 2 열 = 4 셀 = 4 항목). 이미 했으므로 setCellWidget(int row, int column, QWidget* widget)을 호출하여 항목 중 하나의 특정 위젯을 설정할 수 있습니다. 해당 전화 cellWidget(int row, int column)이 없으면 이전에 설정 한 QWidget에 대한 포인터를 반환합니다.

남은 유일한 것은 castQWidget의 파생 클래스로 돌아갑니다. 나는 희망

//To set the value: 
int valueIWant = 5; 
ui->tableWidget->cellWidget(0,2)->setProperty("value",valueIWant);" 
//And to read the value: 
int actualValue = ui->tableWidget->cellWidget(0,2)->property("value").value<int>(); 

:

QWidget* some_cell_widget = myTable->cellWidget(0,1);       // retrieve widget from cell 
QDoubleSpinBox* dbl_spin_box = static_cast<QDoubleSpinBox*>(some_cell_widget); // cast widget to double spin box 
double val = dbl_spin_box->value();            // get value from spinbox 
+0

당신은 절대적으로 훌륭합니다! 왜 이것이 효과가 있는지 나에게 설명해 주시면 친절하니? 나는 코드를 이해하지 못한다. 또는/그것에 대해 읽을 좋은 페이지를 알고 계십니까? – newandlost

+0

나는 대답을 더 자세하게 설명하기 위해 확장했다 – Bowdzone

+0

다시 한번 감사드립니다! 많이 도와 줬어! – newandlost

1

는이 방법에 할 수있는 또 다른 방법 : 당신이 설명을 요청으로

double val = static_cast<QDoubleSpinBox*>(myTable->cellWidget(0,1))->value(); 

, 여기에 의견 한 줄의 코드입니다 이게 도움이 될거야.