我想知道是否可以在QVariant中存储QPushButton。更确切地说,我试图在具有函数setData
的QStandardItemModel中使用它。这就是我想要做的事情:
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)。
提前致谢!
答案 0 :(得分: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);
}
注意:如果您想在排队的广告位连接中使用自定义元类型或使用QMetaMethod
,则必须致电qRegisterMetaType<QPushButton*>()
答案 1 :(得分:1)
您可以执行以下操作,将其存储到QVariant
:
QVariant v = QVariant::fromValue((void *) button);
并从QVariant
检索它:
new_button_pointer = (QPushButton *) v.value<void *>();
请务必小心使用!处理像这样的指针是非常不安全的