Qt5 |带插槽的功能不工作

Qt5 | Function w/ Slot Not Working

我制作了一个有两种形式的应用程序。

当我在第二种形式中按下保存按钮时,它会更新数据库记录,并且 returns 返回到第一种形式。我已经使用以下代码通过 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()

感谢您的帮助。

您在此处创建 UiMainWindow 的第二个实例的问题:

UiMainWindow frmMain;

然后您将信号与第二个实例连接,称之为槽,但您甚至不显示 MainForm 的第二个实例。取而代之的是,您应该在创建 DruckerData 表单后立即在 UiMainWindow 内连接信号和插槽。不幸的是,您的问题没有此代码,所以我无法准确显示位置。这应该是这样的:

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