ITKeyword,专注技术干货聚合推荐

注册 | 登录

Qt基础——让使用Designer创建的UI也能自动适应窗口大小

markely 分享于 2012-08-18

推荐:在Qt中如何使用QtDesigner创建的UI文件(一)

        使用Qt有一些时间了,一直在IDE环境(qtcreator和VS2003+集成器)中使用,自然少了很多麻烦的步骤。但是在享受这种便利的同 时,我们也失去了理解更多知

2020腾讯云8月秒杀活动,优惠非常大!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1040

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

我们知道,通过Qt的各种Layout可以实现控件的自动布局。

但是在使用Qt Designer创建的UI时,发现UI始终是设计时的样子,无法随着容器的放大缩小自适应地变化。

通过之前对ui的.h文件进行分析,我们知道Qt在生成ui代码时,根据最外层的Layout自动添加一个了Widget:

   /** 这个Widget在UI设计时是没有的,是Qt为了方便组合其他的组件而且自动创建的。
    Widget的名字是根据最外层的组件来的,这里最外层是一个QVBoxLayout组件,故Widget
    以VerticalLayoutWidget命名*/
    QWidget *verticalLayoutWidget;

 

而我们在setupUi时,将 verticalLayoutWidget 指定为目标窗体的子控件,而 verticalLayoutWidget 的大小是已经固定了的,如下:

      //创建myQtTestForm的Child Widget,
        verticalLayoutWidget = new QWidget(myQtTestForm);
        verticalLayoutWidget->setObjectName(QString::fromUtf8("verticalLayoutWidget"));
        verticalLayoutWidget->setGeometry(QRect(20, 20, 491, 311));

 

所以, verticalLayoutWidget 不会随父窗口的放大缩小而变化。

解决办法就是,把 verticalLayoutWidget 放在目标窗体的Layout中,代码如下:

    //设置Ui
    ui.setupUi(this);

    //使Ui可自适应父窗口大小
    QVBoxLayout* mainLayout = new QVBoxLayout;
    mainLayout->addWidget(ui.verticalLayoutWidget);
    setLayout(mainLayout);

 

好了,就这么简单!

推荐:在Qt中如何使用QtDesigner创建的UI文件(二)

     除了在编译时处理ui文件外,Qt还提供了在运行时动态加载ui文件的机制。通过QtUiTools模块的QUiLoader可以在运行时加载ui文件。     加载ui文件的方式如以下

我们知道,通过Qt的各种Layout可以实现控件的自动布局。 但是在使用Qt Designer创建的UI时,发现UI始终是设计时的样子,无法随着容器的放大缩小自适应地变化。 通过之前对ui的.h文件进行分析,

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。