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

标签 c++ qt

标题没问题,但我只有三个空行。

永远不会调用 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。

关于c++ - QStandardItemModel 中带有自定义数据的空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242036/

相关文章:

C++ - Smallbin 双链表损坏

c++ - 如何使用c++和QT显示带有动态数据的网页

c++ - QStyledItemDelegate:区分 closeEditor() 或 setModelData() 的原因

qt - 如何将输入和输出文件放入qtcreator

C++ - 指向类类型的指针

c++ - 当我编译指令 __atomic_add_fetch 时到底发生了什么

c++ - LPSolve C++源码库和IDE给出不同的LP任务求解结果

c++ - 官方 ld 链接器规范

c++ - 如何保持 QSlider 处于激活状态以允许随时使用箭头移动

c++ - Qt5:如何将 QPointer 与 Forward Declared 类一起使用