c++ - 如何在主窗口标签的对话框中显示QLineEdit的输入?

标签 c++ dialog qt-creator

我是 QtCreator 的新手,在主窗口上创建了一个按钮来打开一个对话框。在对话框中我添加了 QLineEdit 和一个按钮。当我点击这个按钮时,我希望输入的文本显示在主窗口的 Qlabel 上。

我找到了另一个 question这基本上是一样的,但对我来说,它必须以相反的方式工作。

所以在 MainWindow.h 的 header 中我已经添加到 public:

void setLabelText(QString str);

我创建了 getter/setter 函数并将其添加到 MainWindow.cpp:

void MainWindow::setLabelText(QString str)
{
    ui->label->setText(str);//it is label dialog

}

在 windowdialog.cpp 中,我在按钮 click() 插槽下添加了:

void WindowDialog::on_pushButton_clicked()
{
    QString str = ui->lineEdit->text();
    MainWindow MainWindow;
    MainWindow.setLabelText(str);
}

它编译没有错误。然而,当我点击对话框中的按钮时,它不会在主窗口中打印结果......我一直在试图找到另一个关于如何做到这一点的例子,但还没有真正找到一个。那我错过了什么?或者我该如何进行这项工作?

最佳答案

您可以为此使用信号和槽。 https://doc.qt.io/qt-5/signalsandslots.html

您需要使用此命令将信号连接到插槽

connect(dlg,&DialogWindow::transmit,this,&MainWindow::update);

任何时候你想调用更新函数,你只需要发出信号。

emit transmit(ui->lineEdit->text());

我在这个例子中创建了一个对话框窗口类。

对话框.h

    #ifndef DIALOGWINDOW_H
    #define DIALOGWINDOW_H

    #include <QDialog>

    QT_BEGIN_NAMESPACE
    namespace Ui { class Dialog;   }

    QT_END_NAMESPACE

    class DialogWindow : public QDialog
    {
        Q_OBJECT

    public:
        DialogWindow(QWidget *parent = nullptr);
        ~DialogWindow();

    signals:
        void transmit(QString txt);

    private slots:


        void on_buttonBox_accepted();

    private:

        Ui::Dialog *ui;
    };

    #endif // DIALOGWINDOW_H

对话框.cpp

    #include "dialog.h"
    #include "ui_dialog.h"

    DialogWindow::DialogWindow(QWidget *parent)
        : QDialog(parent),
         ui(new Ui::Dialog)
    {
         ui->setupUi(this);
    }

    DialogWindow::~DialogWindow()
    {

    }

    void DialogWindow::on_buttonBox_accepted()
    {
        emit transmit(ui->lineEdit->text());
    }

主窗口.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>
    #include "dialog.h"

    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();

    private slots:
        void on_pushButton_clicked();
        void update(QString txt);

    private:
        Ui::MainWindow   *ui;
        DialogWindow    *dlg;
    };

    #endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"


    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);

        dlg = new DialogWindow(NULL);

        connect(dlg,&DialogWindow::transmit,this,&MainWindow::update);

    }

    MainWindow::~MainWindow()
    {
        delete ui;
    }


    void MainWindow::on_pushButton_clicked()
    {
        dlg->show();
    }

    void MainWindow::update(QString txt)
    {
        ui->label->setText(txt);
    }

关于c++ - 如何在主窗口标签的对话框中显示QLineEdit的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58590224/

相关文章:

c++ - 如何在 C++ 中读取不断增长的文本文件?

css - 对话框内的 Angular 6 Primeng 确认对话框停用页面

javascript - TinyMCE 编辑器在弹出对话框中丢失了输入框的焦点

Qt Creator 远程调试器

c++ - 如何在 QtCreator 中更改项目的名称?

c++有没有一种方法可以在不中断他的工作的情况下有效地与线程通信

c++ - 带有 typeid 调用的 UB

c++ - 监视本地 pc 网络和阻止 ip 是 winpcap 是工具吗?

android - 获取应用程序上下文以显示图形组件

c++ - Qt安装报错