Seg*_*las 2 c++ qt qtablewidget qlineedit
我创建了一个QLineEdit,设置一个验证器并使用以下代码将其放在表中:
ui->moneyTableWidget->setCellWidget(rowsNum, 1, newQLineEdit);
Run Code Online (Sandbox Code Playgroud)
然后,我有另一个类来操作表的数据,做一个列的每个值的总和.这是代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
但是建筑失败并出现此错误:
/ home/testpec/src/nokia QT/MoneyTracker-build-simulator /../ MoneyTracker/calculator.cpp:11:错误:在分配时无法将'QLineEdit*'转换为'QWidget*'
为什么这个转换错误?
另一个子问题:将表作为参考传递可以节省内存吗?这可能是问题吗?我正在为诺基亚智能手机开发,我认为按价值传递对象是浪费内存......(对不起,如果是一个愚蠢的问题,但我对C++和所有指针的东西有点生疏......)
spb*_*ots 11
当你声明你的时候tmpLineEdit,你应该宣布它是一个QLineEdit*而不是一个QWidget*.你的循环抓取小部件,将其转换为a QLineEdit*,然后尝试将其重新放入QWidget*.另外,我建议使用qobject_cast<QLineEdit*>(或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;
}
Run Code Online (Sandbox Code Playgroud)
关于你的第二个问题,通过引用传递可能是一个好主意 - 我知道Qt中的一些类(特别是QImage)使用引用计数和隐式共享,这样你就可以传递值而不用担心大型副本的含义操作,但我不确定QTableWidget是否也属于该类别.
| 归档时间: |
|
| 查看次数: |
6730 次 |
| 最近记录: |