Qt QTableWidget QDoubleSpinBoxes / QSpinBoxes как элементы, обращающиеся к значениям посредством итерации

0

Я создаю таблицу с двумя строками и двумя столбцами:

Изображение 174551

Второй столбец содержит спинбокс в качестве элементов. Код следующий:

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 Boxes.

  • 0
    QDoubleSpinBox *spinBox как переменную-член основного окна, также как вы это делали с myTable.
  • 0
    Да, но проблема в том, что моя конечная цель - получить доступ к значениям в полях прокрутки с помощью итераций ... Поэтому я ищу способ, с помощью которого я мог бы считывать значения, используя цикл for.
Теги:
qt
qtablewidgetitem
qspinbox

2 ответа

3
Лучший ответ

Виджет таблицы работает с items. Каждая ячейка представляет один элемент (в вашем случае 2 строки x 2 столбца = 4 ячейки = 4 элемента). Как вы уже делали, вы можете установить конкретный виджет для одного из элементов, вызвав setCellWidget(int row, int column, QWidget* widget). Теперь с соответствующим вызовом cellWidget(int row, int column) он вернет этот указатель на QWidget, который вы задали раньше.

Единственное, что осталось то, чтобы cast на QWidget обратно в производном классе.

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
    ты абсолютно замечательный !!! Не могли бы вы объяснить мне, почему это работает? Я не очень понимаю код. Или / и знаете ли вы хорошую страницу, чтобы прочитать об этом?
  • 0
    Я расширил ответ, чтобы дать более подробное объяснение
Показать ещё 1 комментарий
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>();

Надеюсь, это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню