QT(7)自定义Layout

               

我们进一步学习构建稍微复杂一点的布局。通过对抽象类QLayout的继承来进行自己的布局。在这个例子中,我们将重构QLayout类为BorderLayout,QLayout是一个用于布局管理的基础抽象类,而也是QBoxLayout,QGridLayout,QFormLayout和QStackedLayout的继承类。资料来源:

  1. http://doc.qt.nokia.com/latest/layouts-borderlayout.html
  2. http://www.kuqin.com/qtdocument/customlayout.html

一、搭建project的主题框架

我们创建自己的布局类为BorderLayout,使用borderlayout.cpp和borderlayout.h,构造我们的窗口mywindow.h和mywindow.cpp,以及主程序qtmain.cpp。下面是mywindows.cpp的内容,执行后如图所示。

MyWindow:: MyWindow()
{
    QTextBrowser * centralWidget = new QTextBrowser;
    centralWidget->setPlainText(tr("Central widget"));

    BorderLayout * layout = new BorderLayout;
    layout -> addWidget (centralWidget,BorderLayout::Center);
    layout -> addWidget (createLabel("North"),BorderLayout::North);
    layout -> addWidget (createLabel("West"),BorderLayout::West);
    layout -> addWidget (createLabel("East 1"),BorderLayout::East);
    layout -> addWidget (createLabel("East 2"),BorderLayout::East);
    layout -> addWidget (createLabel("South"),BorderLayout::South);
    setLayout(layout);
    setWindowTitle(tr("Border Layout"));
}

QLabel * MyWindow::createLabel(const QString &text)
{
    QLabel * label = new QLabel(text);
    label->setFrameStyle(QFrame::Box |QFrame::Raised);
    return label;
}

二、重点在建立我们的类BorderLayout,我们先建立一个用来存放被布局处理的项目的数据结构QList,每个entry为ItemWrapper,存放组件和位置信息。QLayout的抽象组件为QLayoutItem,实际可以是QLabel等等具体的组件。我们在borderlayout.h中定义:

private:
    struct ItemWrapper

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值