Qt 添加表格小部件项目的问题

Posted

技术标签:

【中文标题】Qt 添加表格小部件项目的问题【英文标题】:Qt Problems Adding Table Widget Items 【发布时间】:2015-03-22 13:55:56 【问题描述】:

我有一个发票表格,我用它来创建发票和显示存储发票的结果。当我试图从数据库中读回数据并显示它时,我收到了

的错误

QTableWidget:不能插入已经被另一个 QTableWidget 拥有的项目 QTableWidget:无法插入已由另一个 QTableWidget 拥有的项目 QTableWidget:无法插入已由另一个 QTableWidget 拥有的项目 QTableWidget:无法插入已由另一个 QTableWidget 拥有的项目 QTableWidget:不能插入已经被另一个 QTableWidget 拥有的项目

我不明白为什么会这样。我尝试运行的查询将返回 4 行。我的代码在下面

QString CompanyID;
            int row = 0;
            ui->comboBox_Invoice_Account_Search->setCurrentIndex(1);
            QSqlQuery Account_Name_Query;
            QTableWidgetItem *Qty_Search = new QTableWidgetItem();
            QTableWidgetItem *Description_Search = new QTableWidgetItem();
            QTableWidgetItem *Product_Code_Search = new QTableWidgetItem();
            QTableWidgetItem *Unit_Price_Search = new QTableWidgetItem();
            QTableWidgetItem *Total_Price_Search = new QTableWidgetItem();
            while(Query.next())
            
                CompanyID = Query.value(10).toString();
                //qDebug() << "CompanyID " << CompanyID;
                ui->lineEdit_Invoice_VAT->setText(Query.value(9).toString());
                ui->lineEdit_Invoice_Total->setText(Query.value(8).toString());
                ui->lineEdit_Goods_Total->setText(Query.value(7).toString());
                Qty_Search->setText(Query.value(3).toString());
                Description_Search->setText(Query.value(4).toString());
                Product_Code_Search->setText(Query.value(5).toString());
                Unit_Price_Search->setText(Query.value(6).toString());
                Total_Price_Search->setText(Query.value(7).toString());
                ui->tableWidget_Invoice->setItem(row, 0, Qty_Search);
                ui->tableWidget_Invoice->setItem(row, 1, Description_Search);
                ui->tableWidget_Invoice->setItem(row, 2, Product_Code_Search);
                ui->tableWidget_Invoice->setItem(row, 3, Unit_Price_Search);
                ui->tableWidget_Invoice->setItem(row, 4, Total_Price_Search);
                row++;
                Account_Name_Query.prepare("SELECT Company_Name FROM Customer WHERE Company_ID = '"+ CompanyID +"'");
                Account_Name_Query.exec();
                while(Account_Name_Query.next())
                
                    ui->lineEdit_Invoice_Account->setText(Account_Name_Query.value(0).toString());
                
            

是什么导致了这个错误?

【问题讨论】:

【参考方案1】:

这是因为您试图将在循环之外创建的相同项目多次设置到同一个表中。将您的代码更改为:

while(Query.next())

    QTableWidgetItem *Qty_Search = new QTableWidgetItem();
    QTableWidgetItem *Description_Search = new QTableWidgetItem();
    QTableWidgetItem *Product_Code_Search = new QTableWidgetItem();
    QTableWidgetItem *Unit_Price_Search = new QTableWidgetItem();
    QTableWidgetItem *Total_Price_Search = new QTableWidgetItem();

    ...

【讨论】:

以上是关于Qt 添加表格小部件项目的问题的主要内容,如果未能解决你的问题,请参考以下文章

Qt入门系列开发教程高级控件篇QTableWidget表格小部件

netbeans:如何将小部件添加到 QT 变量

从 Qt 中的文本文件填充表格小部件

QT:如何检查 qt 表格小部件中是不是有空单元格

Qt 中聊天会话的最佳小部件

qt 小部件在添加到另一个小部件时重叠