【问题标题】:Retrieve value of QTableWidget cells which are QLineEdit widgets检索作为 QLineEdit 小部件的 QTableWidget 单元格的值
【发布时间】:2011-02-09 16:00:57
【问题描述】:

我创建了一个 QLineEdit,设置了一个验证器并使用以下代码将其放在桌子上:

ui->moneyTableWidget->setCellWidget(rowsNum, 1, newQLineEdit);

然后我有 another 类来操作表的数据,对列的每个值进行求和。代码如下:

int Calculator::calculatePricesSum(QTableWidget &moneyTableWidget){
    double total = 0;
    QWidget *tmpLineEdit;
    QString *tmpString;
    for(int row=0; row<moneyTableWidget.rowCount(); row++){
        tmpLineEdit = (QLineEdit*)moneyTableWidget.cellWidget(row,1);       
        tmpString = tmpLineEdit.text();
        total += tmpString->toDouble();
    }
    return total;
}

但构建失败并出现此错误:

/home/testpec/src/诺基亚 QT/MoneyTracker-build-simulator/../MoneyTracker/calculator.cpp:11: 错误:无法将“QLineEdit*”转换为 分配中的‘QWidget*’

为什么会出现这种转换错误?

另一个子问题:将表作为引用传递可以节省内存,对吗?这可能是问题吗?我正在为诺基亚智能手机开发,我认为按值传递对象是浪费内存......(对不起,如果这是一个愚蠢的问题,但我对 C++ 和所有指针的东西有点生疏......)

【问题讨论】:

    标签: c++ qt qtablewidget qlineedit


    【解决方案1】:

    当您声明 tmpLineEdit 时,您应该将其声明为 QLineEdit* 而不是 QWidget*。您的循环抓取小部件,将其转换为QLineEdit*,然后尝试将其放回QWidget*。另外,我建议使用qobject_cast&lt;QLineEdit*&gt;(或dynamic_cast),这样你就可以确保演员成功。

    int Calculator::calculatePricesSum(QTableWidget &moneyTableWidget){
        double total = 0;
        QLineEdit* tmpLineEdit;
        QString tmpString;
        for(int row=0; row < moneyTableWidget.rowCount(); row++)
        {
            tmpLineEdit = qobject_cast<QLineEdit*>(moneyTableWidget.cellWidget(row,1));
            if(NULL == tmpLineEdit)
            {
                // Do something to indicate failure.
            }
            tmpString = tmpLineEdit->text();
            total += tmpString.toDouble();
        }
        return total;
    }
    

    至于你的第二个问题,通过引用传递可能是一个好主意——我知道 Qt 中的一些类(特别是 QImage)使用引用计数和隐式共享,这样你就可以按值传递而不用担心影响大型复制操作,但我不确定 QTableWidget 是否也属于该类别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多