QT —— 如何让QTableWidget表格行列填满整个窗口(mainwindow)

最近在用QT画一个只有一个表格的界面,界面继承的mainwindow。为了整个表格能整体自适应整个窗口的变化,试了各种办法,网上比较多的解决办法是通过Layout布局管理器,但这个只适合行列单元格没有固定的情况,在单元格固定的时候,Table会跟随窗口,但单元格是拖不动的,所以在适配各种不同分辨率的屏幕时,这个方法不能简单的套用。

在这里插入图片描述

在这里插入图片描述

在mainwindow中,直接setlayout会报这样一个错误:
QWidget::setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout

这个错误的原因是mainwindow自身带有一个layout,而QT中一个widget不能同时平行挂两个layout,而将tablewidget直接放到mainwindow自身的layout没找到好用的方法(但测试了一下直接将tablewidget设为setCentralWidget,然后新建layout加进去,发现行不通。)。

解决这个问题,网上前辈们的解决方案是new一个继承mainwindow的Qwidget;

//这个控件新建用来绕开mainwindow的自带layout
QWidget *widget = new QWidget(this);

然后让QTableWidget继承到QWidget窗口下面;

//新建一个表格
QTableWidget *Table = new QTableWidget(widget)

将widget设置为当前窗口的中心控件;

//将widget设置为窗口的中心控件
setCentralWidget(widget);

再新建一个layout(QHBoxLayout、QVBoxLayout都可以),适合自己的界面就好,我这个里是界面只包含一个表格,所以随意了;

//添加布局器     -- 
QHBoxLayout *windowLayout = new QHBoxLayout;

将table添加到布局器layout中;

windowLayout->addWidget(Table);

最后将Windowlayout设置为widget的layout;

widget->setLayout(windowLayout);

到这里差不多表格table是能自适应窗口的变化了,但是有的童鞋可能会惊喜的发现,行列单元格的变化没有跟着走,我这儿就是这样的情况,解决的办法就是让行列的高宽度跟随者自适应表格的变化,添加如下代码;

//表列随着表格变化而自适应变化
Table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//表行随着表格变化而自适应变化
Table->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);

至此,窗口内的表格整体(包括表格单元格内插的其他控件)是可以自适应跟随窗口的变化了。

整个代码块贴一下:

//下面这个代码块用于设置表格自适应窗口的变化
//-- 适配不同大小分辨率的屏幕
//***************************************************************************
//这个控件新建用来绕开mainwindow的自带layout
QWidget *widget = new QWidget(this);
//新建一个表格
QTableWidget *Table = new QTableWidget(widget);
//表列随着表格变化而自适应变化
Table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//表行随着表格变化而自适应变化
Table->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//将widget设置为窗口的中心控件
setCentralWidget(widget);
//添加布局器     -- 垂直
QHBoxLayout *windowLayout = new QHBoxLayout;
windowLayout->addWidget(Table);
widget->setLayout(windowLayout);
//***************************************************************************

原文链接:https://blog.csdn.net/loveliyuyuan/article/details/79453400

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值