簡體   English   中英

QStandardItemModel中帶有自定義數據的空行

[英]Empty lines in QStandardItemModel with custom data

標頭還可以,但是我只有三個空行。

永遠不會調用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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM