首页 > 解决方案 > 为什么重叠比较总是在以下情况下评估为真

问题描述

我不明白为什么下面的代码有警告说明重叠比较总是评估为真。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();
}

标签: c++qt

解决方案


假设QT::DisplayRoleQT::EditRole具有不同的值(否则为什么要与两者进行比较?)然后让我们考虑一下...

如果role等于一个,那么它一定不等于另一个。因此,这两个条件之一将为真。由于这是一个 OR,这意味着整个表达式都是真的。

唯一不会发生这种情况的情况是 if QT::DisplayRole == QT::EditRole。您的意思是使用 AND ( &&) 代替 OR 吗?


推荐阅读