我是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中从列表中检索对象,如上面的代码?
答案 0 :(得分:4)
这与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
循环。
答案 1 :(得分: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
。
答案 2 :(得分: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"; });
}
主窗口有一个按钮,当您单击它时,将调用主窗口中的privete插槽 on_pushButton_clicked()。如果您有更多问题,我可以发布整个文件。如果您不确定要查找的对象是否在列表中,则必须检查是否找到了该对象。
答案 3 :(得分:-3)
怎么样
MyObject selectedobject = myobjectlist.Where(p => p.Myproperty == "Some name")
.FirstOrDefault();