Qt:通过属性在列表中查找对象

5

我是一个Qt的初学者,我更习惯用C#编程。我的问题是如何在Qt中实现下面的C#代码:

public class MyObject 
{    
    private string myproperty;

    public string Myproperty 
    {
                get { return myproperty; }
                set { myproperty = value; }
    }    
}

private void button1_Click(object sender, EventArgs e) 
{
    List<MyObject> myobjectlist = new List<MyObject>();

    MyObject selectedobject = myobjectlist.Find(p => p.Myproperty == "Some name");               
}

在 Qt 中,是否可以像上面的代码一样从列表中检索对象?

4个回答

7

这与Qt本身无关。如果您可以使用C++11,那么像在C#中一样使用lambda表达式:

auto itObj = std::find_if(
  myobjectlist.begin(), myobjectlist.end(),
  [](MyObject o) { return o.myproperty() == "Some name"; }
);
if (itObj != myobjectlist.end())
{
  // object was found, use *itObj (or itObj->) to access it/its members
}
else
{
  // object was not found
}

没有C++11,您需要手动创建一个具有operator()的类作为谓词,或手动编写一个for循环。

2
也许可以这样做?
void MyClass::button1_Click() 
{
    QList<MyObject> myobjectlist;
    MyObject selectedobject;
    foreach (const MyObject &o, myobjectlist) {
        if (o.property("Some name").isValid()) {
            selectedobject = o;
            break;        
        }
    }
}

假设 MyObject 是一个 QObject

1
添加到.pro文件中 CONFIG +=c++11
#include <QString>
#include <QList>
#include <algorithm>
//...
//...
class MyObject
{
private:
    QString myproperty;
public:

   void MypropertySet(QString s)
   {
       myproperty=s;
   }
   QString MypropertyGet() const
   {
       return myproperty;
   }
};



void MainWindow::on_pushButton_clicked()
{
    QList<MyObject> myobjectlist;
    MyObject selectedobject=*std::find_if(myobjectlist.begin(), myobjectlist.end(),[] (const MyObject& s) { return s.MypropertyGet()=="Some name"; });

}

主窗口有一个按钮,当你点击它时,会调用主窗口的私有槽on_pushButton_clicked()。如果你有更多问题,我可以发布整个文件。如果你不确定你要查找的对象是否在列表中,那么你必须检查是否找到了它。

-3

怎么样

MyObject selectedobject = myobjectlist.Where(p => p.Myproperty == "Some name")
                                      .FirstOrDefault();

3
上面的代码是用C#编写的,我的问题是在Qt中等价的代码是什么。 - Rui Sebastião

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接