2

QVariant に QPushButton を格納できるかどうか知りたいです。より正確には、関数を使用して QStandardItemModel で使用しようとしていますsetData。これが私がやりたいことです:

QPushButton* button = new QPushButton("Update");
setData(index(0, 0), "Button");
setData(index(0, 1), button);

しかし、明らかに、それはそのようには機能しないので、私はこれを試しました:

QVariant variant;
variant.setValue(button);
setData(index(0, 1), QVariant::fromValue(variant));

そして、それも機能していません。QTableView を使用せずに実行したいと思います(この種のビューには setIndexWidget があることを知っています)。

前もって感謝します!

4

2 に答える 2

9

QVariant格納できる型のメタタイプが必要です。Q_DECLARE_METATYPEQt は一般的に使用される型のセットを提供しますが、マクロを使用して簡単に拡張できます。

#include <QPushButton>
#include <QVariant>

Q_DECLARE_METATYPE(QPushButton*)

void foo() {
    QPushButton *b1 = new QPushButton("button");
    QVariant v = QVariant::fromValue(b1);
    QPushButton *b2 = qvariant_cast<QPushButton*>(v);
}

注: カスタム メタタイプをキュー スロット接続または とともに使用するQMetaMethod場合は、呼び出す必要があります。qRegisterMetaType<QPushButton*>()

于 2016-01-29T11:01:51.420 に答える