Moro
Yritän saada classB:n napin painalluksella tekstinkentän arvon mainwindow luokassa olevaan listaan. addToList-metodi suoritetaan ja qDebug- toimii, mutta item ei kuitenkaa lisäänny listaan. Mitään virheilmoitusta ei tule.
#include "mainwindow.h" #include "ui_mainwindow.h" #include "classb.h" #include <QDebug> #include <QString> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { classB obj; obj.setModal(true); obj.exec(); } void MainWindow::addToList(QString item) { ui->list->addItem(item); qDebug() << item; }
#include "classb.h" #include "ui_classb.h" #include "mainwindow.h" #include <QString> classB::classB(QWidget *parent) : QDialog(parent), ui(new Ui::classB) { ui->setupUi(this); } classB::~classB() { delete ui; } void classB::on_pushButton_clicked() { MainWindow ob; QString name = (ui->line->text()); ob.addToList(name); }
Lisäys tehdään muuttujaan "ob" ei suinkaan siihen muuttujaan, johon luulet sen tekevän. Muuttuja "ob" classB::on_button_clicked-metodin paikallinen muuttuja, joka katoaa kun funktion suoritus loppuu.
Tuossa voisi lähettää signaalin mainwindow:e, jolloin voit poistaa riippuvuuden classB -luokalta.
"classB" näyttää olevan dialogi-ikkuna, joten jos sen ainoa tehtävä on toimia syöttöikkunana eikä sillä ole omaa monimutkaista toiminnallisuutta, niin jättäisin koko classB-luokan pois. MainWindow-luokassa tekisin tavallisen QDialog-instanssin ja asentaisin classB:n layoutin siihen.
void MainWindow::on_pushButton_clicked() { QDialog d(this); // Parentti on parempi kuin setModal() Ui::classB dialogUi; dialogUi.setupUi(&d); // Suoritetaan vain, jos dialogi on "hyväksytty" if (d.exec()) { ui->list->addItem(dialogUi.line->text()); } }
Mikäli tarvitset kyseistä luokkaa monessa paikassa, niin sitten tee oma luokka, mutta lisää siihen getteri tyyliin thatOneText(), jota käyttäen voit MainWindow'n koodissa hakea syötetyn arvon. Tosin hieman vaikuttaa siltä, että voisit yhtä hyvin käyttää valmista QInputDialog-luokkaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.