我正在尝试实现 QToolBar子类,其项目由模型指定,而不是单独添加。这意味着选择添加/删除项目的功能(工具栏按钮),例如 addAction 不应公开访问。
从该对象继承的最佳方法是什么,但将选择的函数设为私有(private)?
我目前最好的想法是这样做:
class ToolbarView : public QToolBar
{
Q_OBJECT
public:
explicit ToolbarView(QWidget *parent = 0);
signals:
public slots:
private:
void addAction (QAction *action) {Q_UNUSED(action)};
QAction* addAction (const QString &text) {return QToolBar::addAction(text) ;}
...
QAction* addSeparator() {QToolBar::addSeparator();}
... [list of about 10 of these]
};
因此,将所有不应公开的功能重新定义为私有(private)。
这是个好主意,还是有更好的方法?
最佳答案
只要您从QToolBar
公开继承,您就可以让客户端代码像这样对待您的对象并调用例如addAction
成员函数。如果你想确保这些功能不可访问,你必须以另一种方式做到这一点:
- 从
QToolBar
私有(private)继承 - 公开公开您希望公开的函数(例如使用
using
声明)
如果您想坚持最初的解决方案并公开继承QToolbar
:
- 请注意,它不能保证不会调用基类函数
- 您应该考虑使用
using
声明来更改基类函数的可访问性,而不是隐藏它们
关于C++ 继承和隐藏不需要的继承函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4484545/