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 条评论
登录 后参与评论

相关文章

来自专栏WindCoder

css速查手册

最近发现一个不错的英文版css速查手册,整理出来与小伙伴们分享下。不多说了,上代码~参考地址详情见附录~

523
来自专栏24K纯开源

ChartDirector应用笔记(二)

关于Simple Bar Chart Simple bar chart是XYChart大类中的Bar chart类型中的最简单的例子。Bar chart的表现形...

1825
来自专栏更流畅、简洁的软件开发方式

【开源】QuickPager ASP.NET2.0分页控件V2.0.0.7 增加了一个js函数的分页方式。

     昨天在csdn上看到一个人提出来了一种分页的需求,大致是分页控件只负责绘制总页数、上一页、下一页等信息,然后在用户翻页的时候可以触发一个js函数,然后...

2209
来自专栏程序员宝库

分享前端开发常用代码片段

如果你的网页中需要使用大量初始不可见的(例如,悬停的)图像,那么可以预加载这些图像。

1065
来自专栏hightopo

原 快速创建 HTML5 Canvas 电

1232
来自专栏用户2442861的专栏

Qt学习之路_14(简易音乐播放器)

http://www.cnblogs.com/tornadomeet/archive/2012/09/23/2699077.html

391
来自专栏非著名程序员

基础篇章:关于 React Native 之 ViewPagerAndroid 组件的讲解

今天我们来讲解一下关于 ViewPager 的使用,它是一个允许子视图左右滚动翻页的容器。而且每一个 ViewPagerAndroid 的子容器会被视作一个单独...

2035
来自专栏用户2442861的专栏

Qt 学习之路 2(42):QListWidget、QTreeWidget 和 QTableWidget

http://www.devbean.net/2013/02/qt-study-road-2-qlistwidget-qtreewidget-qtablewid...

442
来自专栏菩提树下的杨过

silverlight数据绑定模式TwoWay,OneWay,OneTime的研究

asp.net开发中,数据绑定是一个很简单的概念,控件与数据绑定后,控件可以自动把数据按一定的形式显示出来。(当然控件上的值改变后,可以通过提交页面表单,同时后...

1826
来自专栏Java后端生活

Markdown的十个基本标签

1777

扫描关注云+社区