使用Qt QTableWidget获取多个用户输入值

时间:2015-02-14 18:41:11

标签: c++ qt input qtablewidget

我尝试使用Qt制作用于输入用户输入和显示输出的基本UI。我刚刚开始使用UI,所以这看起来似乎微不足道。我必须接受3组输入,其中每组包含90个整数值。将每个集合视为30乘3的2d数组。我试图看看处理此用户输入的最佳方法是Qt。我已经使用Qt来处理.ui文件,下面的链接是它应该是什么样的截图。

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

更具体地说,我使用QTableWidget来创建表本身。我现在的问题是如何从表的每个单元格访问用户输入并将其存储到整个表的数组中?

帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

QTableWidget::item(int row, int column)返回位置(行,列)的项目。 行可以在0到QTableWidget::rowCount() - 1之间,0到QTableWidget::columnCount()之间的列 - 1

QTableWidgetItem::text()返回项目文字。

创建一个函数,它读取所有项目并将它们添加到循环中的数组中,并使用此函数连接Enter-Button的按下信号。

如果您只想阅读更新的项目:QTableWidget::itemChanged()信号会发送已更新的项目。 QTableWidget::indexFromItem()返回项目的索引,因此您可以更新数组。

答案 1 :(得分:0)

这可能会有所帮助。 (我没有权利发表评论):

我使用 help_index ,它基本上从左到右对元素进行编号。每次编辑单元格(返回按下)时,都会选择下一个元素(help_index行中的+1)。如果到达最后一个索引,我将关注OK按钮。

您可以在以下位置阅读数据:

标签功能:

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

}