2017-02-16 40 views
1

我已经做了两种形式的应用程序。Qt5 |功能瓦特/插槽不工作

当我按下第二种形式的保存按钮时,它会更新数据库记录并返回到第一种形式。我已经连接通过信号插槽两种形式,此代码:

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中的第二个实例。取而代之,在创建DruckerData表单后,您应该在UiMainWindow之内连接信号和插槽。不幸的是,在你的问题没有这个代码,所以我不能显示确切的地方。这应该是这样的:

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