Qt - QWidget到底是什么?

5
在《C++ GUI Programming with Qt 4》一书中,第一章的一个例子提到QWidget作为应用程序的主窗口
Qt参考文档上:http://doc.qt.io/qt-4.8/qwidget.html,有关于QWidget的丰富信息。
但是,什么是基线?QWidget主要是做什么的?什么时候需要使用它?

你了解面向对象编程吗?实际上,通过几个例子的实践可以帮助你理解QWidget是什么。 - Alexandre C.
4个回答

7

一个简单的理解是,任何知道如何在屏幕上显示自己的对象都是QWidget(特别地,是QWidget的某个子类)。

有些对象像QPicture代表一张图片,但是QPicture本身并不知道如何在屏幕上展示自己。通常情况下,你需要将它与一个QLabel之类的控件结合使用(这些控件是QWidget的一种)。


屏幕window本身怎么样?它是一个QWidget吗?我该如何告诉程序,QWidget现在作为窗口在起作用? - Simplicity
@user588855:应用程序的主窗口也是QWidget的一种,它知道如何绘制窗口边框并与操作系统提供的功能(如关闭按钮)进行交互。您可以通过将任意QWidget放入QMainWindow或类似的容器中来显示带有框架的小部件。 - Greg Hewgill
我认为这甚至不需要(当然不需要Qt3) - 一个不是窗口的QWidget本身就成为了一个窗口。虽然这主要是懒惰程序员的选择。 - MSalters

4

这是窗口对象的抽象。每个可见/不可见的Qt窗口相关对象都继承自QWidget。

可以将其类比为车辆,它是汽车、卡车和其他物品的抽象。


1
为什么这本书提到它可以充当“主窗口”? - Simplicity
1
@user:这是因为 Trolltech 的开发人员决定让每个 QWidget 都可以充当主窗口,这样会更方便。 - ninjalj
@user588855:你可以(几乎)用相同的方式驾驶卡车和小汽车。 - xis

1

Widget 是 X11 中用于指代比其他系统中所称的控件更为通用的术语。一个 Widget 可以是一个按钮、一个列表视图、一个窗口等等...

顺便提一下,它据说源自于 Window Gadget


Qt不仅限于X11平台,它是跨平台的。 - xis
1
@xis19:从词源学上讲,QWidget 源于 X11 的 Widgets。 - ninjalj
我知道X11相当古老,但是1920 ?! - MSalters
@MSalters: 在 X 窗口系统之前我不知道 widget 这个词存在。所以,QWidget 来自于 X11 对 widget 的使用,而 widget 本身来自于 window gadget 或者 _widget_,或者更可能是两者的结合。 - ninjalj

1
在像X11这样的窗口系统中,顶层窗口和小部件之间没有区别。所有都被称为“窗口”,并且它们都有父母和子代(除了根窗口,通常是桌面壁纸所绘制的)。因此,一个小部件可以是顶层窗口(即根窗口的子代)或任何其他窗口,这是有意义的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接