我有一个对象:
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?
中区分孩子的父亲答案 0 :(得分:0)
要将子项添加到项目,请对该项目使用void QStandardItem::appendRow(QStandardItem * item)
。 QStandardItem
还有方法child()
和parent()
,可帮助您确定是否有父母/子女。 QModelIndex
类也是如此,因此它也可以帮助您识别是否存在与索引相关的子项或父项。