Bootstrap

「Qt Widget中文示例指南」如何为窗口实现流程布局?(一)

Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。

本文将展示如何为不同的窗口大小排列小部件。

流程布局实现了处理不同窗口大小的布局,小部件的位置取决于应用程序窗口的宽度。

Flowlayout类主要使用QLayoutQWidgetItem,而Window类使用QWidgetQLabel

「Qt Widget中文示例指南」如何创建一个窗口标志?(一)

点击获取Qt Widget组件下载

运行示例

要从Qt Creator中运行示例,请打开Welcome模式并从Examples中选择示例。

FlowLayout类定义

FlowLayout类继承了QLayout,它是一个自定义布局类,可以水平和垂直地排列其子部件。

class FlowLayout : public QLayout
{
public:
explicit FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1);
explicit FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1);
~FlowLayout();

void addItem(QLayoutItem *item) override;
int horizontalSpacing() const;
int verticalSpacing() const;
Qt::Orientations expandingDirections() const override;
bool hasHeightForWidth() const override;
int heightForWidth(int) const override;
int count() const override;
QLayoutItem *itemAt(int index) const override;
QSize minimumSize() const override;
void setGeometry(const QRect &rect) override;
QSize sizeHint() const override;
QLayoutItem *takeAt(int index) override;

private:
int doLayout(const QRect &rect, bool testOnly) const;
int smartSpacing(QStyle::PixelMetric pm) const;

QList<QLayoutItem *> itemList;
int m_hSpace;
int m_vSpace;
};

我们重新实现了从QLayout继承的函数,这些函数将项目添加到布局中并处理它们的方向和几何形状。

我们还声明了两个私有方法:doLayout() 和 smartSpacing(),doLayout()对布局项进行布局,而smartSpacing()函数计算它们之间的间距。

下期我们将继续介绍FlowLayout类的实现,敬请关注哦......

Qt Widget组件推荐
  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!
;