使用信号和插槽与Qt中的主窗口通信QDialog

Using Signals and Slots to Comunicate a QDialog with MainWindow in Qt

本文关键字:窗口 通信 QDialog Qt 信号 插槽      更新时间:2023-10-16

好吧,我想是时候寻求一些帮助了,我一直在练习Qt中的信号和插槽,我有存货。我想要的是,当点击QDialog中的按钮时,能够在主窗口中更改标签。我一直在搜索,显然唯一的方法是使用信号和插槽,以下是我所拥有的。。。

我有一个主窗口.ui,它有一个名为"pushButton_OpenWindow"的按钮和一个QLabel label_ShowText",我还有一个外部对话框.ui,其中包含一个QLineEdit,名为lineEdit_ExternalInput和一个QPushButton,名为"pushButton_SendText",我想要的是,当点击pushButton_SendText时,将"label_ShowText"更改为"lineEdit_ExternalInput"的任何值,但它不起作用,当我点击按钮时,什么都不会发生,没有错误,没有警告。

这是不起作用的代码。。。

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_pushButton_OpenWindow_clicked();
    void textValue(const QString &newText);
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "externaldialog.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ExternalDialog *externalDialog = new ExternalDialog;
    // connecting signals and slots
    QObject::connect(externalDialog, SIGNAL(textChanged(QString)), this, SLOT(textValue(QString)));
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_pushButton_OpenWindow_clicked()
{
    ExternalDialog mDialog;
    mDialog.setModal(true);
    mDialog.exec();
}
void MainWindow::textValue(const QString &newText)
{
    ui->label_ShowText->setText(newText);
    qDebug()<<"Message from textValue Function n";
}

外部模拟.h

#ifndef EXTERNALDIALOG_H
#define EXTERNALDIALOG_H
#include <QDialog>
namespace Ui {
class ExternalDialog;
}
class ExternalDialog : public QDialog
{
    Q_OBJECT
public:
    explicit ExternalDialog(QWidget *parent = 0);
    ~ExternalDialog();
private:
    Ui::ExternalDialog *ui;
signals:
     void textChanged(const QString&);
public slots:
     void on_pushButton_SendText_clicked();
};
#endif // EXTERNALDIALOG_H

外部音频.cpp

#include "externaldialog.h"
#include "ui_externaldialog.h"
#include <QDebug>

ExternalDialog::ExternalDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ExternalDialog)
{
    ui->setupUi(this);
}
ExternalDialog::~ExternalDialog()
{
    delete ui;
}

void ExternalDialog::on_pushButton_SendText_clicked()
{
    emit textChanged(ui->lineEdit_ExternalInput->text());
    qDebug()<<"Sent Message";
}

main.cpp

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

知道我做错了什么吗?任何建议都将不胜感激。对不起,我发布了整个代码,但有时最好能看到整个图片。

非常感谢

将函数MainWindow::on_pushButton_OpenWindow_clicked()更改为此

void MainWindow::on_pushButton_OpenWindow_clicked()
{
    externalDialog->setModal(true);
    externalDialog->exec();
}

您刚刚在原始函数中创建了一个新的未连接对话框。