我想创建一个自定义工具栏小部件(类似于功能区)。然后我想创建一个QMainWindow
,它使用这个自定义小部件作为工具栏。
我可以做类似
的事情class RibbonToolbar : public QToolBar {
...
};
...
QMainWindow *window = new QMainWindow();
RibbonToolbar *toolbar = new RibbonToolbar(window);
window->addToolBar(toolbar);
问题在于,RibbonToolbar
以这种方式继承了QToolbar
中的所有方法,我不想要它,因为我的小部件不使用它们。它是一个全新的小部件。
我想这样做:
class RibbonToolbar : public QWidget {
...
};
因此,如果我以这种方式宣布我的课程,那么将它添加到QMainWindow顶部的最佳方式是什么?
PS:如果调整QMainWindow
的大小,可以调整我的小部件,但是,就像Microsoft Office中的功能区一样,它是一个固定的位置,因此它无法移动到主窗口中。
答案 0 :(得分:0)
在C++
中,无法从类中删除功能。但是,可以隐藏现有功能。(1)
话虽如此,如何通过声明QToolBar
来隐藏private
您不想使用的成员函数?
我们以QWidget
为例:
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
void setGeometry(const QRect &);
void setGeometry(int x, int y, int w, int h);
};
#endif // WIDGET_H
widget.cpp:
#include "widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent)
{
}
Widget::~Widget()
{
}
void Widget::setGeometry(const QRect &)
{
}
void Widget::setGeometry(int x, int y, int w, int h)
{
}
在这种情况下,即使setGeometry
是QWidget
的成员函数,也不能再使用Widget
。同样,您可以通过将其声明为私有隐藏QToolBar::isMovable
并为其提供空实现。
更方便的是声明它们protected
,以便在需要时可以从派生类访问它们。
你不能使用AFAIK
class RibbonToolbar : public QWidget {
...
};
因为QMainWindow
API是以这样的方式制作的,它只接受指向QToolBar
工具栏区域的指针。您可以通过创建与RibbonToolbar
二进制兼容的QToolBar
和reinterpret_cast
对象QToolBar*
来欺骗它,但是您需要深入了解{Qt
的内部胆量。 1}}它仍然是不好的做法。