类QLayout和类QMainWindow Qt c++之间的继承
Posted
技术标签:
【中文标题】类QLayout和类QMainWindow Qt c++之间的继承【英文标题】:Inheritance between class QLayout and class QMainWindow Qt c++ 【发布时间】:2018-06-22 09:57:17 【问题描述】:我有一个继承自 QMainWindow 的 MainWindow 类。我有另一个继承自 QLayout 的 LayoutWindow 类。 当我声明一个 LayoutWindow 类的实例时,我有一个错误:
错误:抽象类类型的无效新表达式 ...
我不明白,因为 QMainWindow 继承自 QWidget,而 QWidget 继承自 QLayout?
这是我的代码:
类主窗口:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
//instance class LayoutWindow
layoutwindow=new LayoutWindow();
centralArea = new QWidget;
centralArea->setLayout(layoutwindow);
setCentralWidget(centralArea);
类 LayoutWindow.h
class LayoutWindow : public QLayout
Q_OBJECT
public:
LayoutWindow();
;
类 LayoutWindow.cpp
LayoutWindow::LayoutWindow()
//here is my code
有人知道我的问题吗?
【问题讨论】:
QLayout
确实是一个抽象类。如果不在那里实现纯虚函数,就无法实例化 LayoutWindow
类对象。并且QWidget
不继承任何其他类。
Here 是关于在子类化 QLayout
时要做什么的快速入门。不过,根据我的经验,Qt 附带的现有 QLayout 子类适合/可组合满足许多需求,但我无法判断您的特定应用程序。
【参考方案1】:
QLayout
具有纯虚方法,您必须在要实例化的子类中实现这些方法。
这些是
void addItem(QLayoutItem *item);
int count() const;
QLayoutItem * itemAt(int index) const;
QLayoutItem * takeAt(int index);
您断言QWidget
继承QLayout
是错误的,它继承自QObject
和QPaintDevice
,两者都没有基类。 QWidget
有一个布局member,用于排列子小部件。
我也不认为您需要派生自QLayout
的类。您应该使用现有布局和小部件类型的 对象 组合来排列窗口。作为 QT 安装的一部分,您应该拥有一个用于可视化设计窗口的工具 QDesigner.exe
。
【讨论】:
我想保持相同的MainWindow,但根据界面中选择的功能,我想更改MainWindow内部的布局。这就是为什么我希望有不同的类来管理布局。 @Thomas1314 如果您只想在运行时添加或删除子小部件,您可以在没有自定义QLayout
子类的情况下执行此操作。如果您有完全不同的小部件集,请参阅QStackedWidget
感谢您的回答。如果我理解正确的话。我创建了继承自 QStackedWidget 的 LayoutWindow 类。我在 MainWindow 类中调用这个类,然后显示我的按钮、标签……就这样?
不,你根本没有LayoutWindow
类。 MainWindow
可能有一个 member QStackedWidget *
,它将各种子小部件添加到其中。我强烈鼓励您学习 Qt 可视化设计工具来制作静态表单,它们会为您完成所有繁琐的设置。查看 Qt 示例程序以上是关于类QLayout和类QMainWindow Qt c++之间的继承的主要内容,如果未能解决你的问题,请参考以下文章