7

すべて、私は多項式の係数を示すものをQGridLayout維持しています。QLabelsを使用して多項式を表し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;
    }
}
4

3 に答える 3

5

問題は、QGridLayout::rowCount()実際に表示できる行数を返すのでQGridLayoutはなく、データの行に内部的に割り当てられた行数を実際に返すことです(はい、これはあまり明白ではなく、文書化されていません)。

これを回避するには、を削除しQGridLayoutて再作成するか、列数が変更されないと確信している場合は、次のようにします。

int rowCount = m_informational->count()/m_informational->columnCount();
于 2012-11-15T21:45:34.950 に答える
1

これを解決するには、QVBoxLayout(行用)を作成し、その中にQHBoxLayout(列用)を追加しました。次に、QHBoxLayoutで、ウィジェットを(1行に)挿入していました。このようにして、行をうまく削除することができました-全体的な行数は正常に機能していました。これに加えて、挿入メソッドも取得しました。これにより、特定の場所に新しい行を挿入できました(すべてが正しく並べ替え/番号が付け直されました)。

例(頭からのみ):

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);
于 2013-04-24T07:07:32.527 に答える
0

さて、私の解決策はQGridLayoutClearInformational

于 2012-11-15T21:43:57.573 に答える