排序QTableWidget时,QTableWidgetItem子类运算符<()永远不会被调用

时间:2013-07-30 19:02:53

标签: c++ qt sorting

我想为我的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);

1 个答案:

答案 0 :(得分:1)

operator<()的签名与QTableWidgetItem的签名不符,因此即使已将其声明为虚拟,也不会以允许您的方式进入vtable QTableWidget甚至可以称之为。

签名QTableWidgetItem的{​​{1}}需要operator<()作为参数,因此您必须将其投放到QTableWidgetItem以执行您想要的操作。< / p>

FloatFieldTableItem