QMainWindow 和 QWidget 设置layout

给QWidget或者QDialog设置布局的时候方式很简单。创建好一个布局:mainLayout,然后不停地把各个控件往mainLayout里面放,最后调用setLayout(mainLayout)就行了。 QMainWindow中使用这个方法的时候却不管用,因为QMainWindow是默认有layout的,所以再次设置layout会失效。

会出现这种提示:

QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout 这句话的意思是说,你已经给MainWindow设置过一个布局了,再设置一个会出错。 该如何给QMainWindow正确地设置布局呢 要想QMainWidget创建布局,合理的步骤应该是这样的: 第一步创建一个QWidget实例,并将这个实例设置为centralWidget: 然后创建一个主布局mainLayout,并把所需要的所有控件都往里面放(工具栏、菜单栏、状态栏除外): ...

最一步就是将widget的布局设置为mainLayout

widget = new QWidget();  
this->setCentralWidget(widget);  
cbox = new QCheckBox(this);  
cbox->setText("choose");  
cbox->setChecked(false);  
button = new QPushButton(this);  
QVBoxLayout *layout = new QVBoxLayout(this);  
 
layout->addWidget(cbox);  
layout->addWidget(button);  
 
widget->setLayout(layout);  

这样就可了。

/******************************************************************************************************/

void QWidget::setLayout(QLayout * layout)

Sets the layout manager for this widget to layout.

If there already is a layout manager installed on this widget, QWidget won't let you install another. You must first delete the existing layout manager (returned by layout()) before you can call setLayout() with the new layout.

If layout is the layout manager on a different widget, setLayout() will reparent the layout and make it the layout manager for this widget.

另一种方法:

    QApplication a(argc, argv);
    QMainWindow w;
    w.show();

    QWidget window;

    QSpinBox *spinBox = new QSpinBox(&window);
    QSlider *slider = new QSlider(Qt::Horizontal, &window);


    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(spinBox);
    layout->addWidget(slider);
//    window.setLayout(layout);
//    w.setCentralWidget(&window);

    delete w.layout();

    w.setLayout(layout);
    return a.exec();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android干货园

Android 隐藏显示键盘

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/49...

13910
来自专栏Flutter入门到实战

Android仿简书长按文章生成图片效果

使用简书APP的同学都知道,简书有这样一个功能:文章页长按内容时底部会出现一个 生成图片分享 的按钮,点击之后就可以将当前的文章生成一张长图片,这张图片可以保存...

43320
来自专栏飞雪无情的博客

Android Layout的layout_height等属性为什么会不起作用?

有的时候,我们配置好的布局文件,在加载完成添加到我们的Activity中后发现,并没有安装我们设置的属性来布局,比为我们设置了android:layout_ma...

11930
来自专栏Android知识点总结

2-VVI-材料设计之CardView

10610
来自专栏向治洪

Android开发模式之MVC,MVP和MVVM的简单介绍与区别

相信大家对MVC,MVP和MVVM都不陌生,作为三个最耳熟能详的Android框架,它们的应用可以是非常广泛的,但是对于一些新手来说,可能对于区分它们三个都有困...

1.4K80
来自专栏Android知识点总结

1--安卓多媒体之图片综合篇

8320
来自专栏iOSDevLog

Android 闪屏 Splash

29860
来自专栏Android 技术栈

Android 关于Glide的拓展(高斯模糊、加载监听、圆形图片)

Glide默认开启磁盘缓存和内存缓存,当然也可以对单张图片进行设置特定的缓存策略。 设置图片不加入到内存缓存

1.4K30
来自专栏androidBlog

RecycleView下拉刷新控件的封装(包括下拉刷新和加载更多 )

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

47610
来自专栏青蛙要fly的专栏

项目需求讨论-WebView进度加载条

又到了每次的实际项目开发中的需求讨论了。这次是因为做的项目是原生内嵌WebView,所以当我们的WebView在加载网页的时候,需要有个加载进度条,当然这时候有...

14330

扫码关注云+社区

领取腾讯云代金券