QStandardItemModel中带有自定义数据的空行

Empty lines in QStandardItemModel with custom data

本文关键字:数据 自定义 QStandardItemModel      更新时间:2023-10-16

标题是好的,但我只有三个空行。

方法FileConfig::data永远不会被调用!
你知道为什么吗?

model= new MyModel;
model->setHeaderData(0, Qt::Horizontal, tr("Title"));
model->setHeaderData(1, Qt::Horizontal, tr("Direcory"));
model->setHeaderData(2, Qt::Horizontal, tr("Date"));
model->invisibleRootItem()->setChild(0, new FileConfig("/home/user/dir/riri.conf"));
model->invisibleRootItem()->setChild(1, new FileConfig("/home/user/dir/fifi.conf"));
model->invisibleRootItem()->setChild(2, new FileConfig("/home/user/dir/loulou.conf"));
proxy= new QSortFilterProxyModel(this);
proxy->setSourceModel(model);
view= new QTreeView;
view->setModel(proxy);

MyModel继承自QStandardItemModel,暂时为空。
我的自定义类:

class FileConfig : public QStandardItem {
    public:
        std::string getFileName() const;
        std::string getFileDirectory() const;
        std::string getDate() const;
        FileConfig(const char *fileconfig);
        virtual QStandardItem *clone() const;
        virtual QVariant data(const QModelIndex &index, int role= Qt::DisplayRole) const;
    private:
        boost::filesystem::path file;
};
FileConfig::FileConfig(const char *fileconfig) : QStandardItem() {
    file= boost::filesystem::path(fileconfig);
}
QVariant FileConfig::data(const QModelIndex &index, int role) const {
    if(role == Qt::DisplayRole)
        switch(index.column()) {
            case 0: return getFileName().c_str();
            case 1: return getFileDirectory().c_str();
            case 2: return getDate().c_str(); }
    return QVariant();
}

当您向模型添加新项目时,尝试使用appendRow代替setChild。例如:

model->invisibleRootItem()->appendRow(new FileConfig(/*path*/));

编辑:您还需要在FileConfig的类定义中的Q_OBJECT宏,否则信号和插槽将无法工作。请记住在添加宏后重新运行QMake。