Qt 和 C++:覆盖或展开 Class
Qt and C++: Overwrite or Expand Class
我想向 QPushButton
添加一些属性(如 ID)。因此,我需要扩展或覆盖 class Q_WIDGETS_EXPORT QPushButton : public QAbstractButton
我该怎么做?
感谢您的帮助。
这真的取决于用例。从 Qt-(Widget) 继承没有问题(通常是预期的方式)类(如果我错了请纠正我)。
所以你可以这样做:
class MyQPushButton : public QPushButton
{
Q_OBJECT
public:
MyQPushButton() : QPushButton(...) {}
private:
int ID = -1;
}
Qt 有非常好的文档,您可以查看源代码以了解要覆盖的内容。
您也可以使用 QPushButton
扩展一个新的 class,但是如果您需要,您总是必须处理 class 中的 QPushButton 引用,例如连接一些东西。在继承的class中可以连接插槽等等。但是例如你可以这样做:
class MyQPushButton
{
public:
MyQPushButton() {}
const QPushButton& const GetQPushButton() { return pushButton; }
const QPushButton* const GetQPushButtonPtr() { return &pushButton; }
private:
QPushButton pushButton;
int ID = -1;
}
没有对错之分。但我会将继承用于 Qt-classes.
你不需要扩展 class 来只在里面放一个 id ...而是使用 property system.
官方指定的doc here:
A property can be read and written using the generic functions QObject::property() and QObject::setProperty(), without knowing anything about the owning class except the property's name.
你只需要做:
ui->myButton->setProperty("Id", 123456);
也可以是另一个对象,例如一个字符串(或者甚至是你自己的 class 如果你定义它来做到这一点)
ui->myButton->setProperty("_name", "123456");
阅读 属性 是适合您的方法 property()
但请阅读文档,因为您会得到 QVariant
作为 return 示例:
QVariant(int, 123456)
我想向 QPushButton
添加一些属性(如 ID)。因此,我需要扩展或覆盖 class Q_WIDGETS_EXPORT QPushButton : public QAbstractButton
我该怎么做?
感谢您的帮助。
这真的取决于用例。从 Qt-(Widget) 继承没有问题(通常是预期的方式)类(如果我错了请纠正我)。
所以你可以这样做:
class MyQPushButton : public QPushButton
{
Q_OBJECT
public:
MyQPushButton() : QPushButton(...) {}
private:
int ID = -1;
}
Qt 有非常好的文档,您可以查看源代码以了解要覆盖的内容。
您也可以使用 QPushButton
扩展一个新的 class,但是如果您需要,您总是必须处理 class 中的 QPushButton 引用,例如连接一些东西。在继承的class中可以连接插槽等等。但是例如你可以这样做:
class MyQPushButton
{
public:
MyQPushButton() {}
const QPushButton& const GetQPushButton() { return pushButton; }
const QPushButton* const GetQPushButtonPtr() { return &pushButton; }
private:
QPushButton pushButton;
int ID = -1;
}
没有对错之分。但我会将继承用于 Qt-classes.
你不需要扩展 class 来只在里面放一个 id ...而是使用 property system.
官方指定的doc here:
A property can be read and written using the generic functions QObject::property() and QObject::setProperty(), without knowing anything about the owning class except the property's name.
你只需要做:
ui->myButton->setProperty("Id", 123456);
也可以是另一个对象,例如一个字符串(或者甚至是你自己的 class 如果你定义它来做到这一点)
ui->myButton->setProperty("_name", "123456");
阅读 属性 是适合您的方法 property()
但请阅读文档,因为您会得到 QVariant
作为 return 示例:
QVariant(int, 123456)