2012-11-15 16 views
5

すべて、私はQGridLayoutQLabelsを保持しており、多項式の係数を示しています。私はQList<double>を使って私の多項式を表現しています。QGridLayoutから行を削除

私の係数を更新するたびに、ラベルを更新します。リストのサイズを変更すると、私のメソッドではうまくいきません。 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; 
    } 
} 
+0

可能重複(http://stackoverflow.com/questions/5395266/removing-widgets-from-qgridlayout) – emkey08

答えて

2

を削除することでした(はい、これはあまり明白ではなく、文書化されていません)。このおQGridLayoutを削除して再作成、またはあなたの列数が変更されないことを確信している場合、あなたはこのような何かを行うことができいずれかを回避するために

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

うん後いくつかの強力なデバッグ、私はそれを理解しました...私はあなたの部門のソリューションが好きですが、それは私の仕事に非常に特有です。 – Constantin

0

まあ、私の解決策にも問題がQGridLayout::rowCount()が実際にあなたが見ることができる行数を返しません、それは実際にQGridLayoutが内部の行のために割り当てている行数を返すことであるQGridLayoutClearInformational

0

私はこれを解決QVBoxLayout(行用)を作成し、この中にQHBoxLayout(列用)を追加しました。 QHBoxLayoutではウィジェットを挿入していました(1行で)。このようにして、行をうまく取り除くことができました。これに加えて、私は特定の場所に新しい行を挿入することができた(すべてが正しく並べ替えられ/番号が変更された)、挿入メソッドを得ました。

例(ヘッドのみから):[QGridLayoutからウィジェットを削除する]の

QVBoxLayout *vBox= new QVBoxLayout(this); 

//creating row 1 
QHBoxLayout *row1 = new QHBoxLayout(); 
QPushButton *btn1x1 = new QPushButton("1x1"); 
QPushButton *btn1x2 = new QPushButton("1x2"); 
row1->addWidget(btn1x1); 
row1->addWidget(btn1x2); 
//adding to vBox - here you can use also insertLayout() for insert to specific location 
vBox->addlayout(row1); 

//creating row 2 
QHBoxLayout *row2 = new QHBoxLayout(); 
QPushButton *btn2x1 = new QPushButton("2x1"); 
QPushButton *btn2x2 = new QPushButton("2x2"); 
row2->addWidget(btn2x1); 
row2->addWidget(btn2x2); 
//adding to vBox - here you can use also insertLayout() for insert to specific location 
vBox->addlayout(row2); 
関連する問題