gpt4 book ai didi

c++ - 从 QGridLayout 中删除一行

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:41 24 4
gpt4 key购买 nike

所有,我正在维护一个QGridLayoutQLabels显示多项式的系数。我使用 QList<double> 表示我的多项式.

每次更新系数时,我都会更新标签。更改列表大小时,我的方法效果很好。 QGridLayout::rowCount()没有正确更新。我想知道是否有办法从 QGridLayout 中删除行。


代码如下,更新 QGridLayout尺寸更多(或更少)QLabels

int count = coefficients->count(); //coefficients is a QList<double> *
if(count != (m_informational->rowCount() - 1)) //m_information is a QGridLayout
{
SetFitMethod(0);
for(int i = 0; i < count; ++i)
{
QLabel * new_coeff = new QLabel(this);
new_coeff->setAlignment(Qt::AlignRight);
m_informational->addWidget(new_coeff, i+1, 0);
QLabel * param = new QLabel(this);
param->setAlignment(Qt::AlignLeft);
param->setText(QString("<b><i>x</i><sup>%2</sup></b>").arg(count-i-1));
m_informational->addWidget(param, i+1, 1);
QSpacerItem * space = new QSpacerItem(0,0,QSizePolicy::Expanding);
m_informational->addItem(space, i+1, 1);
}

m_informational->setColumnStretch(0, 3);
m_informational->setColumnStretch(1, 1);
m_informational->setColumnStretch(2, 1);
}

SetFitMethod(这是一个初始模型)

void SetFitMethod(int method)
{
ClearInformational();
switch(method)
{
case 0: //Polynomial fit
QLabel * title = new QLabel(this);
title->setText("<b> <u> Coefficients </u> </b>");
title->setAlignment(Qt::AlignHCenter);
m_informational->addWidget(title,0,0,1,3, Qt::AlignHCenter);
}
}

清算方法:

void ClearInformational()
{
while(m_informational->count())
{
QLayoutItem * cur_item = m_informational->takeAt(0);
if(cur_item->widget())
delete cur_item->widget();
delete cur_item;
}
}

最佳答案

问题是 QGridLayout::rowCount() 实际上并没有返回您可以看到的行数,它实际上返回了 QGridLayout 的行数已在内部分配数据行(是的,这不是很明显,也没有记录)。

要解决这个问题,您可以删除 QGridLayout 并重新创建它,或者如果您确信您的列数不会改变,您可以这样做:

int rowCount = m_informational->count()/m_informational->columnCount();

关于c++ - 从 QGridLayout 中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13405997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com