2015-02-14 3 views
1

Я пытаюсь создать базовый интерфейс для ввода пользовательского ввода и отображения вывода с использованием Qt. Я только начал работать с пользовательскими интерфейсами, так что это может показаться тривиальным. Я должен взять 3 набора входов, где каждый набор состоит из 90 целых значений. Подумайте о каждом наборе как 2d массиве 30 на 3. Я пытаюсь понять, что лучший способ обработать этот пользовательский ввод будет в Qt. Я использовал Qt для работы с файлом .ui, а приведенная ниже ссылка представляет собой скриншот того, как он должен выглядеть.Возьмите несколько пользовательских значений ввода с помощью Qt QTableWidget

http://i.stack.imgur.com/KedP7.png

Чтобы быть более конкретным, я использовал QTableWidget создать саму таблицу. Теперь мой вопрос заключается в том, как получить доступ к пользовательскому вводу из каждой ячейки таблицы и сохранить его в массиве для всей таблицы?

Справка будет оценена по достоинству.

Спасибо!

ответ

0

Это может помочь. (У меня нет возможности комментировать):

Я использую help_index, который в основном числивает элементы слева направо. Каждый раз, когда ячейка редактируется (возвращается нажатие), выбирается следующий элемент (+1 в строке справки_индекса). Если последний индекс достигнут, нажмите кнопку ОК.

Вы можете прочитать данные по адресу:

Tab функции:

void MainWindow::on_tableWidget_cellChanged(int row, int column) 
    { 
     QString test_STR1 = ui->tableWidget->item(row,column)->text(); // is string 
     qDebug(QString("OnCell %1,%2:%3").arg(column).arg(row).arg(test_STR).toLatin1()); 
     // EG int array[rows][columns]; 
     // QList<QStringList<QString>> (equivalent to: QList<QList<QString>>) 
     int columncount , rowcount, help_index,nextRow, nextColimn; 
     columncount = ui->tableWidget->columnCount(); 
     rowcount = ui->tableWidget->rowCount(); 
     help_index = column + row*columncount +1; 
     if(help_index < columncount*rowcount) 
     { 
      nextRow = help_index/columncount; 
      nextColimn = help_index % columncount; 
      ui->tableWidget->setCurrentCell(nextRow,nextColimn); 
     } 
     else 
     { 
      ui->pushButton_OK->setFocus(); 
     } 
    } 

Ok_button:

void MainWindow::on_pushButton_OK_clicked() 
{ 
    for(int i=ui->tableWidget->columnCount()-1;i>=0;i--) 
     for(int j=ui->tableWidget->rowCount()-1;j>=0;j--) 
     { 
      QString test_STR2 = ui->tableWidget->item(j,i)->text(); 
      qDebug(QString("OnOk %1,%2:%3").arg(i).arg(j).arg(test_STR).toLatin1()); 
     } 

} 
1

QTableWidget::item(int row, int column) возвращает товар в позиции (строка, столбец). Строка может быть между 0 и QTableWidget::rowCount() - 1, колонка между 0 и QTableWidget::columnCount() - 1

QTableWidgetItem::text() возвращает текст пунктов.

Создайте функцию, которая считывает все элементы и добавляет их в массив в цикле, соедините нажатый сигнал кнопки Enter с этой функцией.

Если вы хотите читать только обновленные элементы: сигнал QTableWidget::itemChanged() отправляет элемент, который был обновлен. QTableWidget::indexFromItem() возвращает индекс элемента, поэтому вы можете обновить свой массив.