2014-09-11 43 views
0

訪問值I創建一個表具有兩行和兩列:Qt的QTableWidget的QDoubleSpinBoxes/QSpinBoxes作爲元素通過迭代

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

myTable被聲明爲的MainWindow成員。

通常情況下,僅僅SpinBoxes值通過訪問:

ui->spinBox->value(); 

但這不是在這裏工作。

如何獲取SpinBoxes的值作爲QTableWidget中的項目? 我想通過迭代來訪問SpinBoxes,因此使用for循環來遍歷所有Spin Box。

+0

聲明'QDoubleSpinBox * spinBox'作爲主窗口成員變量以及您使用myTable進行的操作。 – vahancho 2014-09-11 07:51:04

+0

Ja但是問題是我的最終目標是通過迭代訪問旋轉框中的值...所以我正在尋找一種方法,以便可以使用for循環讀出值。 – newandlost 2014-09-11 07:57:11

回答

2

表格插件可與items一起使用。每個單元格表示一個項目(在您的情況下2行x 2列= 4個單元格= 4項)。正如你已經做過的那樣,你可以通過調用setCellWidget(int row, int column, QWidget* widget)來爲其中一個項目設置特定的部件。與相應的調用cellWidget(int row, int column)不同,它將返回指向您之前設置的QWidget的指針。

剩下的唯一東西就是castQWidget回到它的派生類。

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

至於你問一個解釋,這裏是有意見的單行代碼:

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 2014-09-11 08:47:07

+0

我將答案擴展爲給出更詳細的解釋 – Bowdzone 2014-09-11 09:38:57

+0

再次感謝!幫助了我很多! – newandlost 2014-09-11 12:17:19

1

另一種方法來做到這一點是這樣:

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

希望這可以幫助。