是否可以将 QPushButton 存储在 QVariant 中?
Is it possible to store a QPushButton in a QVariant?
我想知道是否可以将 QPushButton 存储在 QVariant 中。更准确地说,我试图在具有函数 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)。
提前致谢!
您可以这样做,将其存储到 QVariant
:
QVariant v = QVariant::fromValue((void *) button);
并从 QVariant
检索它:
new_button_pointer = (QPushButton *) v.value<void *>();
记得小心使用哦!像这样处理指针是非常不安全的
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*>()
我想知道是否可以将 QPushButton 存储在 QVariant 中。更准确地说,我试图在具有函数 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)。
提前致谢!
您可以这样做,将其存储到 QVariant
:
QVariant v = QVariant::fromValue((void *) button);
并从 QVariant
检索它:
new_button_pointer = (QPushButton *) v.value<void *>();
记得小心使用哦!像这样处理指针是非常不安全的
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*>()