这是一个创建 GUI 的简单 Qt C++ 程序。我是一名学生,而且我对 C++ 的熟悉程度不及 Java。在下面显示的代码中,有一个名为*window
的类QWidget
的窗口对象引用,它没有包含在代码的开头。据我所知,所有包含的小部件都在 QWidget(QSlider & QSpinBox) 下。 QWidget 的基类是什么。 (如果QObject和QWidget之间有基类)?为什么可以从 QWidget 创建对象而不包含它?为什么 QWidget 基类
的整个对象
显示为一个窗口,如果那些其他的 Widget 类在它下面(见下图)。
图片来自 C++-GUI-Programming-with-Qt-4-1st-ed ebook
#include <QApplication>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("select your age");
QSlider *slider = new QSlider(Qt::Horizontal);
QSpinBox *spin = new QSpinBox;
slider->setRange(0, 130);
spin->setRange(0, 130);
QObject::connect( spin, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)) );
QObject::connect( slider, SIGNAL(valueChanged(int)), spin, SLOT(setValue(int)) );
spin->setValue(30);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spin);
layout->addWidget(slider);
window->setLayout(layout);
window->show();
return app.exec();
}
最佳答案
QSlider
继承自 QAbstractSlider
,后者本身继承自 QWidget
。所以包含QSlider
间接包含了QWidget
,允许你创建一个。 QSpinBox
与任何其他小部件一样,也继承自 QWidget
。
如解释in the doc :
A widget without a parent widget is always an independent window (top-level widget).
所以 QWidget *window
实际上创建了一个带有标题栏和所有内容的窗口。
关于c++ - 为什么可以从 QWidget 创建对象而无需将其包含在 C++ 程序的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31557910/