Pecurka
Pecurka

Reputation: 113

Qt5 | Function w/ Slot Not Working

I've made an app with two forms.

When I press the save button in the second form, it updates the DB Record, and returns back to the first form. I've connected the two forms via Signal-Slot with this code:

DruckerData.h

signals:
void btnSavePressed(QString printerName);

DruckerData.cpp

UiMainWindow frmMain;
connect(this,SIGNAL(btnSavePressed(QString)),&frmMain,SLOT(refreshSaved( QString )));
emit btnSavePressed(ui->ledit_druckerName->text());
this->hide();

UiMainWindow.h

public slots:
void refreshSaved(QString printerName);

UiMainWindow.cpp

void UiMainWindow::refreshSaved(QString printerName){
    qDebug()<<"Updated: "<<printerName;

    show_list(); //<<<<<<<<<<<<<<<<<<<<<< this function
}

show_list

void UiMainWindow::show_list (){

    QList<DB_Printers_lvs> list;
    DB_Printers_lvsTransporter t("LVS");
    QString        wc;

    this->setCursor(Qt::WaitCursor);

    wc = QString("where 1=1 order by nam_printer");
    if (!t.load_dbPrinters_lvs_wc(&list,wc))
    {
        log()<< "get printers failed"<< wc << t.getLastError();
        this->setCursor(Qt::ArrowCursor);
        return;
    }


    ui.treeWidget->clear();

    foreach (DB_Printers_lvs db, list)
    {
        QTreeWidgetItem *item = new QTreeWidgetItem(0);

        printer_to_qtreewidgetitem(item, db);

        ui.treeWidget->insertTopLevelItem(ui.treeWidget->topLevelItemCount(), item);
    }

    ui.treeWidget->header()->resizeSections(QHeaderView::ResizeToContents);
    ui.bow_search->apply();
    this->setCursor(Qt::ArrowCursor);
}

When I press the button on the second form and the first form shows I see debug writing Updated with printer name but the problem is how can I call or start this funktion show_list()?

Thanks for help.

Upvotes: 1

Views: 77

Answers (1)

Evgeny
Evgeny

Reputation: 4010

The problem that you create second instance of UiMainWindow here:

UiMainWindow frmMain;

Then you connect signal with this second instance, call it's slots, but you don't even show this second instance of MainForm. Instead of this, you should connect signal and slot inside the UiMainWindow just after you create DruckerData form. Unfortunatly there is no this code at your question so i can't show exactly place. This should be something like this:

//Inside UiMainWindow
DruckerData *data = new DruckerData(this);
connect(data, SIGNAL(btnSavePressed(QString)),this,SLOT(refreshSaved( QString )));
data->show();

Upvotes: 2

Related Questions