5

QStringListModelがあります

QStringListModel* blocksModel = new QStringListModel();

そして、QObjectから継承されたクラス

class Block : public QObject
{
    Q_OBJECT

public:

    Block();
    Block(const Block& other);
    ~Block;

//and other stuff here    

};
Q_DECLARE_METATYPE(Block*)

Qt :: EditRoleにデータを設定すると、すべて正常に機能しますが、Qt :: UserRoleにデータを設定しようとすると、trueが返されることはなく、データを取得すると、無効なQVariantが表示されます。

int count = blocksModel->rowCount();
blocksModel->insertRows(count, 1);
QModelIndex index = blocksModel->index(count, 0);

// it works
QString name = QString("Block %1").arg(count + 1);
blocksModel->setData(index, name);

QVariant var = QVariant::fromValue(block);
// it doesn`t work
bool setSuccessful = blocksModel->setData(index, var, Qt::UserRole);

//invalid QVariant
QVariant var2 = index.data(Qt::UserRole);
Block* oneMoreBlock = var2.value<Block*>();

実際、アイテムに設定しようとしているデータの種類に関係なく、これも機能しません。

blocksModel->setData(index, QVariant(1), Qt::UserRole);

そして、Qt :: UserRole + 1を試しましたが、同じ結果が得られました。たぶん、モデルで使用されるItemDataRolesを何らかの方法で定義する必要がありますか?

何か案は?ありがとう。

4

1 に答える 1

6

QStringListModelの代わりにQStandardItemModelを使用してみてください。

QStringListModelはQt::UserRoleをサポートしていないようです。

于 2012-04-03T10:37:11.843 に答える