QT Widget应用是本文要介绍的内容,主要是来了解并学习QT Widget应用,具体内容的学习来看本文详解。
Widget 是使用 Qt 编写的图形用户界面 (GUI) 应用程序的基本生成块。每个 GUI 组件,如按钮、标签或文本编辑器,都是一个 widget ,并可以放置在现有的用户界面中或作为单独的窗口显示。每种类型的组件都是由 QWidget 的特殊子类提供的,而 QWidget 自身又是 QObject 的子类。
QWidget 不是一个抽象类;它可用作其他 widget 的容器,并很容易作为子类使用来创建定制 widget。它经常用来创建放置其他 widget 的窗口。
至于 QObject,可使用父对象创建 widget 以表明其所属关系,这可确保删除不再使用的对象。使用 widget,这些父子关系就有了更多的意义:每个子类都显示在其父级所拥有的屏幕区域内。也就是说,当删除窗口时,其包含的所有 widget 也都自动删除。
创建窗口
如果 widget 未使用父级进行创建,则在显示时视为窗口或顶层 widget。由于顶层 widget 没有父级对象类来确保在其不再使用时就删除,因此需要开发人员在应用程序中对其进行跟踪。
在下例中,我们使用 QWidget 创建和显示具有默认大小的窗口:
- QWidget *window = new QWidget();
- window->resize(320, 240);
- window->show();
我们可以通过将 window 作为父级传递给其构造器来向窗口添加子 widget。在这种情况下,我们向窗口添加按钮并将其放置在特定位置:
- QPushButton *button = new QPushButton(tr("Press me"), window);
- button->move(100, 100);
- button->show();
该按钮现在为窗口的子项,并在删除窗口时一同删除。请注意,隐藏或关闭窗口不会自动删除该按钮。
使用布局
通常,子 widget 是通过使用布局对象在窗口中进行排列,而不是通过指定位置和大小进行排列。在此处,我们构造要并排排列的标签和行编辑框 widget。
- QLabel *label = new QLabel(tr("Name:"));
- QLineEdit *lineEdit = new QLineEdit();
- QHBoxLayout *layout = new QHBoxLayout();
- layout->addWidget(label);
- layout->addWidget(lineEdit);
- window->setLayout(layout);
我们构造的布局对象管理通过 addWidget() 函数提供的 widget 的位置和大小。布局本身是通过调用 setLayout() 提供给窗口的。布局仅可通过其对所管理的 widget(和其他布局)的效果才可显示。
在上文示例中,每个 widget 的所属关系并不明显。由于我们未使用父级对象构造 widget 和布局,我们会看到一个空窗口和两个包含了标签与行编辑框的窗口。不过,如果我们告知布局来管理标签和行编辑框,并在窗口中设置布局,两个 widget 与布局本身就都会成为窗口的子项。
由于 widget 可包含其他 widget,布局可用来提供按不同层次分组的 widget。这里,我们要在显示查询结果的表视图上方、窗口顶部的行编辑框旁,显示一个标签。
- QLabel *queryLabel = new QLabel(tr("Query:"));
- QLineEdit *queryEdit = new QLineEdit();
- QTableView *resultView = new QTableView();
- QHBoxLayout *queryLayout = new QHBoxLayout();
- queryLayout->addWidget(queryLabel);
- queryLayout->addWidget(queryEdit);
- QVBoxLayout *mainLayout = new QVBoxLayout();
- mainLayout->addLayout(queryLayout);
- mainLayout->addWidget(resultView);
- window->setLayout(mainLayout);
除了 QHBoxLayout 和 QVBoxLayout,Qt 还提供了 QGridLayout 和 QFormLayout 类来协助实现更复杂的用户界面。
小结:解析QT Widget应用的内容介绍完了,希望通过QT Widget内容的学习能对你有所帮助!