[Qt] Dynamiczne dodawanie i usuwanie kontrolek

0

Hej, mam layout w którym chcę dynamicznie dodawać i usuwać przycisk wraz ze znajdującym się obok niego polem. Napisałem coś takiego:

MainWindow::MainWindow()
{
  resize(500,300);

  QLineEdit *edit = new QLineEdit;
  QPushButton *one = new QPushButton(tr("Dodaj"));
  connect(one,SIGNAL(clicked()),this,SLOT(addLine()));

  layout = new QFormLayout;
  layout->addRow(edit,one);
  setLayout(layout);
}

void MainWindow::addLine() {
  QLineEdit *line = new QLineEdit;
  QPushButton *button = new QPushButton(tr("Usun"));
  connect(button,SIGNAL(clicked()),this,SLOT(removeLine()));
  buttons.push_back(qMakePair(line,button));
  layout->addRow(buttons.last().first,buttons.last().second);
}

void MainWindow::removeLine() {
  layout->removeWidget(buttons[2].first);
  layout->removeWidget(buttons[2].second);
  buttons.remove(2);
}

Działa, w tej chwili usuwa zawsze wiersz drugi, natomiast chciałbym aby usuwało ten wiersz w którym został kliknięty przycisk Usuń. Krótko mówiąc, nie wiem w jaki sposób wyciągnąć index odpowiedniego wiersza.

0

W removeLine możesz pobrać, który przycisk został naciśnięty tak
QObject* o = sender();
A tym to już co Tobie wygodniej ;)

0

Dobra, mogę sobie to napisać nawet tak:

QPushButton *button = static_cast<QPushButton*>(sender());

Tylko co to zmienia? I tak nie odczytam z tego w którym wierszu jest przycisk, ani nie wyszukam go w qvector, bo nie ma jak, niczym się od innych nie wyróżnia, nawet tekstem.

0
Santi napisał(a)

Dobra, mogę sobie to napisać nawet tak:

QPushButton *button = static_cast<QPushButton*>(sender());

Tylko co to zmienia? I tak nie odczytam z tego w którym wierszu jest przycisk, ani nie wyszukam go w qvector, bo nie ma jak, niczym się od innych nie wyróżnia, nawet tekstem.

Jednak się wyróżnia. Każdy obiekt ma swój adres - porównaj wskaźniki.

0

Dzięki wielkie, zupełnie na to nie wpadłem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1