是否可以在QVariant中存储QPushButton?

IAm*_*PLS 2 qt qvariant qpushbutton

我想知道是否可以在QVariant中存储QPushButton.更确切地说,我试图在具有该功能的QStandardItemModel中使用它setData.这就是我想要做的事情:

QPushButton* button = new QPushButton("Update");
setData(index(0, 0), "Button");
setData(index(0, 1), button);
Run Code Online (Sandbox Code Playgroud)

但显然,它不能像那样工作,所以我尝试了这个:

QVariant variant;
variant.setValue(button);
setData(index(0, 1), QVariant::fromValue(variant));
Run Code Online (Sandbox Code Playgroud)

它也不起作用.我想在不使用QTableView的情况下这样做(我知道在这种视图中有一个setIndexWidget).

提前致谢!

kin*_*nak 8

QVariant需要一个它可以存储的类型的元类型.Qt提供了一组常用类型,但您可以使用Q_DECLARE_METATYPE宏来扩展它:

#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);
}
Run Code Online (Sandbox Code Playgroud)

注意:如果要在排队的插槽连接中使用自定义元类型,或者使用QMetaMethod,则必须调用qRegisterMetaType<QPushButton*>()