Qt5 |功能w /插槽不工作

时间:2017-02-16 13:52:12

标签: qt signals slots

我已经制作了两种形式的应用。

当我按下第二种形式的保存按钮时,它会更新数据库记录,然后返回第一个表格。我通过Signal-Slot将这两种表格与此代码连接起来:

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,但问题是如何调用或启动此功能show_list()

感谢您的帮助。

1 个答案:

答案 0 :(得分: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();