将QList <t>分配给QList <t>时的C ++,QT错误

时间:2015-12-12 07:32:15

标签: qt struct qml qt5 qtquick2

我正在使用c ++开发QML应用程序,但我目前仍然遇到一个简单的错误:

  

C:\ Qt \ 5.2.1 \ mingw48_32 \ include \ QtCore \ qvector.h:679:错误:不匹配&#39;运营商==&#39; (操作数类型是&#39; ListModel&#39;和&#39; ListModel&#39;)            if(!(* - i == * - j))                       ^

我的标题是:

#ifndef COMBOBOXUPDATE_H
#define COMBOBOXUPDATE_H
#include <QObject>
#include <QStringList>
#include <QString>
#include <QVector>

struct ListModel;

class ComboboxUpdate:public  QObject
{
Q_OBJECT
Q_PROPERTY(QVector<ListModel> comboList READ comboList)

public:

  ComboboxUpdate(QObject *parent = 0);
  QVector<ListModel> comboList();
  void setComboList( QVector<ListModel> &comboList);

private:
QVector<ListModel> m_comboList;
int         m_count;
};

struct  ListModel
{
ListModel();
ListModel(QString _text,int _Sqlid)
{
    text=_text;
    Sqlid=_Sqlid;
}
QString text;
int     Sqlid;
};
#endif // COMBOBOXUPDATE_H

实现文件中的代码区域出现错误:

void ComboboxUpdate::setComboList(  QVector<ListModel> &comboList)
{
    if (m_comboList != comboList)
    {
        m_comboList = comboList;
    }
}

我无法理解为什么会出现这个问题。我的主要目标是使用ListElement之类的东西从c ++端填充组合框。我可以使用QStringList成功填写。但我希望像ListElement那样填写。例如:

ComboBox {
    model: ListModel {
               ListElement {sqlid:"1"; text:"Pansi"}
               ListElement {sqlid:"2"; text:"Rose"}
               ListElement {sqlid:"3"; text:"Clips"}
           }
    anchors.fill: parent
}

在QML方面,此模型显示ComboBox中的文本并将值存储到sqlite中。我怎么能在c ++方面做到这一点?

1 个答案:

答案 0 :(得分:2)

您需要为班级operator==提供ListModel。例如:

struct  ListModel
{
    bool operator==(const ListModel& other) const {
        return other.text == text && other.Sqlid == Sqlid;
    }
};