уничтожить QHBoxLayout - PullRequest
       4

уничтожить QHBoxLayout

3 голосов
/ 27 июня 2011

Привет, когда-нибудь здесь мой код, я вызываю все эти операторы в моем обработчике событий кнопки, как этот

void analysis::on_pushButton_clicked()
{
 myplot * p = new myplot(gao.structpayloadgraph,gao1.structpayloadgraph, gao.structcol-2, "payload");

    myplot * p1 = new myplot(gao.structsessiongraph,gao.structsessiongraph ,gao.structcol-2, "session");


  QHBoxLayout * layout = new QHBoxLayout;
 ui->horizontalLayout_2->addLayout(layout);
 layout->addWidget(p);
 layout->addWidget(p1);

}

myplot - класс построения графиков но проблема в том, что каждый раз, когда я нажимаю кнопку, появляется новый график, а предыдущий остается, как один! 2-й щелчок появляется, в секунду они становятся 4, а затем 6 ...... как мне уничтожить QHBoxLayout в моем обработчике событий кнопки

спасибо

Ответы [ 3 ]

0 голосов
/ 27 июня 2011

Сделайте ваш layout глобальным для on_pushButton_clicked() функции.

Затем удалите все предыдущие виджеты из него:

    QLayoutItem *item;
    QLayoutIterator it = layout->iterator();

    while((item = it.takeCurrent()) != 0) {
        layout->remove(item->widget());
        delete item->widget();
    }

После чего вы можете добавить свои виджеты:

    layout->addWidget(p);
    layout->addWidget(p1);

UPD: Только для режима Qt3Support .

UPD2:

    QLayoutItem *tItem;
    while (tItem = layout->takeAt(0) != 0)
        delete tItem;
0 голосов
/ 05 декабря 2011

вы должны сделать что-то вроде:

в вашем классе:

<code>
class analysis{</p>

<p>private:
      ...
      QHBoxLayout* hLayouot;
      ...</p>

<p>public:
      ...
 };

в конструкторе вы должны создать объект:

<code>hLayout = new QHBoxLayout(this);
-> если вы не можете поместить 'this' в конструктор, поскольку ваш класс не наследует от QWidget, вы ДОЛЖНЫ удалить hLayout внутри деструктора!

, а в вашем методе void analysis::on_pushButton_clicked() вы можете вызвать

<code>hLayout->removeWidget()
.. У меня также возникла проблема с удалением из макетов: я вызвал hLayout-> clear () и затем заново вставил объекты!
0 голосов
/ 27 июня 2011

Попробуйте создать только один макет и после каждого клика попробуйте выполнить что-то вроде этого макета-> removeWidget (...); для удаления графа prew.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...