【问题标题】: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();
    

    【讨论】:

    • 上面的代码是C#,我的问题是Qt中的等价物是什么
    【解决方案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;        
              }
          }
      }
      

      假设MyObjectQObject

      【讨论】:

        【解决方案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()。如果您有更多问题,我可以发布整个文件。如果您不确定要查找的对象是否在列表中,则必须检查是否找到它。

        【讨论】:

          猜你喜欢
          • 2016-04-03
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-16
          • 1970-01-01
          相关资源
          最近更新 更多