2017-02-16 2 views
1

Я сделал приложение с двумя формами.Qt5 | Функция w/Slot Not Working

Когда я нажимаю кнопку сохранения во второй форме, она обновляет запись БД и возвращается к первой форме. Я соединил эти две формы через сигнал-слот с этим кодом:

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); 
} 

При нажатии кнопки на второй форме и первая форма показывает, что я вижу отладку писать Updated с именем принтера, но проблема в том, как я могу позвонить или запустить этот FUNKTION show_list()?

Спасибо за помощь.

+0

Можем ли мы увидеть 'show_list();' –

+0

я редактировал свой пост и добавил show_list – Pecurka

+0

поставить тест QDebug в начале 'show_list()' а затем запустить. –

ответ

2

Проблема, которую вы создаете второй экземпляр UiMainWindow здесь:

UiMainWindow frmMain; 

Затем вы подключаете сигнал с этой второй инстанции, называют это слоты, но вы даже не показывать это второй экземпляр MainForm. Вместо этого вы должны подключить сигнал и слот внутри UiMainWindow сразу после создания формы DruckerData. К сожалению, в вашем вопросе нет этого кода, поэтому я не могу точно указать место. Это должно быть что-то вроде этого:

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