QGridLayout示例及刷新布局

您所在的位置:网站首页 桌面重新布置 QGridLayout示例及刷新布局

QGridLayout示例及刷新布局

2024-03-11 01:49| 来源: 网络整理| 查看: 265

 

Qt之格栅布局(QGridLayout):https://blog.csdn.net/swartz_lubel/article/details/54932517

Qt学习之路14--布局管理器(QGridLayout):https://blog.csdn.net/tqs_1220/article/details/81842878

具体的接口用法细节,上述文章中均有提及,下面举一个实际开发过程中的例子:

Qt 之 QSizePolicy:https://blog.csdn.net/liang19890820/article/details/51986284

QSpacerItem (Horizontal Spacer 、Vertical Spacer) 的隐藏与显示:https://blog.csdn.net/xiezhongyuan07/article/details/81111829

效果:

.cpp:

#include "widget.h" #include "ui_widget.h" using namespace QtCharts; Widget::Widget(QWidget *parent) : QWidget(parent) // ui(new Ui::Widget) { // ui->setupUi(this); setui(); } Widget::~Widget() { // delete ui; } void Widget::setui() { //需要布局的元器件(五个摁键,一个QLable,一个QTextEdit,一个ComboBox,一个TableWidget,一个QChart) QPushButton * One = new QPushButton("One",this); QPushButton * Two = new QPushButton("Two",this); QPushButton * Three = new QPushButton("Three",this); QPushButton * Four = new QPushButton("Four",this); QPushButton * Five = new QPushButton("Five",this); //最小尺寸设置 One->setMinimumSize(100,40); Two->setMinimumSize(100,40); Three->setMinimumSize(100,40); Four->setMinimumSize(100,40); Five->setMinimumSize(100,40); QLabel * Label_One = new QLabel("QGridLayout测试",this); Label_One->setMinimumSize(60,20); QTextEdit * TextEdit_One = new QTextEdit(this); TextEdit_One->setText("20191019"); TextEdit_One->setMaximumSize(100,40); QComboBox * combobox = new QComboBox(this); combobox->addItem("选项1"); combobox->setMinimumSize(100,40); QTableWidget * Table_one = new QTableWidget(this); Table_one->setWindowTitle("Test"); Table_one->setMinimumSize(300,400); Table_one->setRowCount(10); Table_one->setColumnCount(4); //固定行列高宽 // for(int i = 0;isetRowHeight(i,40); // } // for(int i = 0;isetColumnWidth(i,65); // } Table_one->horizontalHeader()->setSectionResizeMode(QHeaderView.Stretch); Table_one->verticalHeader()->setSectionResizeMode(QHeaderView.Stretch); //只读模式,设置点击(Triggers)的编辑模式 Table_one->setEditTriggers(QAbstractItemView::NoEditTriggers); QStringList headr; headrsetHorizontalSpacing(10); // 设置垂直间距 GridLayout->setVerticalSpacing(5); GridLayout->setContentsMargins(10, 10, 10, 10); //行拉伸 GridLayout->setRowStretch(0, 1);//拉伸因子 GridLayout->setRowStretch(1, 4);//拉伸因子 GridLayout->setRowStretch(2, 1);//拉伸因子 //列拉伸 GridLayout->setColumnStretch(0, 1);//拉伸因子 GridLayout->setColumnStretch(1, 1);//拉伸因子 GridLayout->setColumnStretch(2, 2);//拉伸因子 GridLayout->setColumnStretch(3, 2);//拉伸因子 }

关于刷新布局:

 

同一个Dialog中,根据用户的选择,会弹出两种界面。

//Dialog.h private: QGridLayout *GridLayout; //Dialog.cpp QDialog::QDialog(QWidget *parent) : QDialog(parent) { ............ GridLayout = new QGridLayout(this); ........... } void coeffclass::WindowForChose() { QMessageBox box(QMessageBox::Warning, "选择","请选择模式:"); box.setStandardButtons(QMessageBox::Yes | QMessageBox::No); box.setButtonText(QMessageBox::Yes, QString("模式1")); box.setButtonText(QMessageBox::No, QString("模式2")); int ret = box.exec(); if(ret == QMessageBox::Yes) { //选择一个阶数就行 UISET_WindowForChose(true); } else if(ret == QMessageBox::No) { //选择多组阶数 UISET_WindowForChose(false); } } void coeffclass::UISET_WindowForChose(const bool MODE) { qDebug()removeWidget(child->widget()); child->widget()->setParent(0); delete child; } delete GridLayout; GridLayout = new QGridLayout(this); } //栅格化布局的相关设置 ........ //栅格化布局的相关设置 setLayout(GridLayout); this->show(); } else if(MODE == false) { qDebug()count()!=0) { QLayoutItem *child; while ((child = GridLayout->takeAt(0)) != 0) { GridLayout->removeWidget(child->widget()); child->widget()->setParent(0); delete child; } delete GridLayout; GridLayout = new QGridLayout(this); } //栅格化布局的相关设置 ........ //栅格化布局的相关设置 setLayout(GridLayout); this->show(); } }

首先:判断进行新布局前,有没有旧布局需要清理,如果没有,进行新布局,如果有,删除旧布局。

关于删除旧布局:

if(GridLayout->count()!=0) { QLayoutItem *child; while ((child = GridLayout->takeAt(0)) != 0) { GridLayout->removeWidget(child->widget()); child->widget()->setParent(0); delete child; } delete GridLayout; GridLayout = new QGridLayout(this); }

①:QGridLayout需要移除该控件     GridLayout->removeWidget(child->widget());

②:将该控件的父对象设置为0          child->widget()->setParent(0);

③:删除该控件                                  delete child;

④:最终删除整个布局                       delete GridLayout;

并重新我布局分配空间,为了之后的布局做准备。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3