将子项添加到自定义QStandardItem

时间:2015-05-19 08:53:37

标签: c++ qt

我有一个对象:

class Mando : public QObject, public QStandardItem {
      Q_OBJECT

   public:
      std::string getDescription() const;
      std::string getName() const;
      explicit Mando(boost::filesystem::path filen);

   private:
      boost::filesystem::path file;
};
Q_DECLARE_METATYPE(Mando *)

Mando::Mando(boost::filesystem::path filen) {
   file= filen; }

std::string Mando::getName() const {
   return file.filename().string(); }

std::string Mando::getDescription() const {
   return std::string("XxxxX"); }

模型实施:

ContentModel::ContentModel() : QStandardItemModel() {
   QStringList headers;
   headers << tr("Name") << tr("Description");
   setHorizontalHeaderLabels(headers);
   setColumnCount(headers.count()); }

QVariant ContentModel::data(const QModelIndex &index, int role) const {
   if(role == Qt::DisplayRole)
      switch(index.column()) {
         case 0: return static_cast<Mando*>(item(index.row()))->getName().c_str();
         case 1: return static_cast<Mando*>(item(index.row()))->getDescription().c_str(); }
   return QStandardItemModel::data(index, role); }

我添加这样的对象:

model->appendRow(new Mando(boost::filesystem::path("/home/user/riri.ini")));
model->appendRow(new Mando(boost::filesystem::path("/home/user/fifi.ini")));
model->appendRow(new Mando(boost::filesystem::path("/home/user/loulou.ini")));
view= new QTreeView();
view.setModel(model);

一切正常,我明白了:

riri.ini              XxxxX
fifi.ini              XxxxX
loulou.ini            XxxxX

但是,在某些情况下,我需要添加一个孩子。

riri.ini              XxxxX
  -> riri's child     YyyyY
fifi.ini              XxxxX
loulou.ini            XxxxX
  -> loulou's child   YyyyY

如果我在Mando实例中添加一个简单的行,如下所示:

Mando::Mando(boost::filesystem::path filen) {
    file= filen;
    appendRow(new QStandardItem() /* or */ QList<QStandardItem*>); }

如何在ContentModel :: data?

中区分孩子的父亲

1 个答案:

答案 0 :(得分:0)

要将子项添加到项目,请对该项目使用void QStandardItem::appendRow(QStandardItem * item)QStandardItem还有方法child()parent(),可帮助您确定是否有父母/子女。 QModelIndex类也是如此,因此它也可以帮助您识别是否存在与索引相关的子项或父项。