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).
提前致谢!
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*>()