标题没问题,但我只有三个空行。
永远不会调用 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/