【问题标题】:Qt : Find object in list by propertyQt:按属性在列表中查找对象
【发布时间】:2014-08-04 01:19:36
【问题描述】:
我是 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 是否可以像上面的代码一样从列表中检索对象?
【问题讨论】:
标签:
c#
c++
list
qt
properties
【解决方案1】:
怎么样
MyObject selectedobject = myobjectlist.Where(p => p.Myproperty == "Some name")
.FirstOrDefault();
【解决方案2】:
这与 Qt 本身无关。如果您可以使用 C++11,请使用 lambda,就像在 C# 中一样:
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 循环。
【解决方案3】:
也许是这样?
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。
【解决方案4】:
添加到 .pro 文件
配置 +=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()。如果您有更多问题,我可以发布整个文件。如果您不确定要查找的对象是否在列表中,则必须检查是否找到它。