我正在尝试实现一个QToolBar子类,它的项目由模型指定,而不是单独添加。这意味着可以选择添加/删除项目(工具栏按钮)的功能,例如addAction不应公开访问。
从这个对象继承的最佳方法是什么,但是选择私有函数?
我目前最好的想法是这样做:
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]
};
因此,将所有不应公开的功能重新定义为私有。
这是一个好主意,还是有更好的方法?
答案 0 :(得分:10)
只要您从QToolBar
公开继承,就可以使客户端代码将对象视为对象,并调用addAction
成员函数。如果您想确保这些功能无法访问,您可以采用另一种方式:
QToolBar
using
声明)如果您想坚持使用初始解决方案并从QToolbar
公开继承:
using
声明来更改基类函数的可访问性而不是隐藏它们答案 1 :(得分:2)
也许你能想到这个
class ToolbarView : private QToolBar
{
//...
}
在这种情况下,所有可访问的QToolBar都将在您的工具栏视图中进行私人访问。
答案 2 :(得分:1)
您公开继承自QToolbar
。如何将其更改为private
继承。那个,类定义应该以
class ToolbarView : private QToolBar
{
// good only if you want to
// make "most" of the public members of QToolBar private in ToolbarView
}