我不明白为什么以下代码会发出警告,指出重叠的比较总是评估为true。 next语句永远不会执行。
QVariant MainModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if ((role != Qt::DisplayRole) || (role != Qt::EditRole)) // always evaluates to true warning, but why?
return QVariant();
if (index.column() == 0 && index.row() < m_values.count()) // this is never executed warning
return m_values.at( index.row() );
else
return QVariant();
}
答案 0 :(得分:2)
假设QT::DisplayRole
和QT::EditRole
具有不同的值(否则,为什么要将两者进行比较?)然后考虑一下...
如果role
等于一个,则必须不等于另一个。因此,两个条件之一将成立。而且由于这是一个OR,因此意味着整个表达式都是正确的。
只有QT::DisplayRole == QT::EditRole
不会发生这种情况。您是否要使用AND(&&
)代替OR?