我想为我的QTableWidget
实现自定义排序,因此我将QTableWidgetItem
子类化并重新实现operator<()
函数。
class FloatFieldTableItem : public QTableWidgetItem
{
public:
FloatFieldTableItem(qreal theFloat) :
QTableWidgetItem(),
_float(theFloat)
{}
virtual bool operator<(FloatFieldTableItem const &other) const
{
return _float < other.float;
}
private:
qreal _float;
};
但由于某种原因,operator<()
函数永远不会被调用!
tableWidget->setItem(0, 0, new FloatFieldTableItem(0.1));
tableWidget->setItem(1, 0, new FloatFieldTableItem(0.3));
tableWidget->setItem(2, 0, new FloatFieldTableItem(6.1));
// This should result in a call to the operator<() function above
tableWidget->sortItems(0);
答案 0 :(得分:1)
operator<()
的签名与QTableWidgetItem
的签名不符,因此即使已将其声明为虚拟,也不会以允许您的方式进入vtable
QTableWidget
甚至可以称之为。
签名QTableWidgetItem
的{{1}}需要operator<()
作为参数,因此您必须将其投放到QTableWidgetItem
以执行您想要的操作。< / p>
FloatFieldTableItem