c++ - 如何从主窗口访问另一个Windows ui?

标签 c++ qt

因此,我在Qt中使用C++,并且希望能够从主窗口批准对话框页面上文本框中的用户名和密码。
这是我到目前为止所拥有的;

    //Login
    QString username1 = ui.employeelogindialog->Username->text();
    QString password1 = ui.employeelogindialog->Password->text();

有一个错误的说法:

mainwindow.cpp:37:27: error: member reference type 'Ui::EmployeeloginDialog *' is a pointer; did you mean to use '->'?



我该如何解决?

最佳答案

要从另一个窗口小部件获取mainwindow的数据,您可以为此窗口小部件创建信号并将其发送到mainwindow cpp中。

您的ui指针应为private以保护它。

例如小部件类:

#include "ui_widget.h"

class Widget: public QWidget, private Ui::Widget
{
    Q_OBJECT

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

private:
    QLineEdit *Username= nullptr;
    QLineEdit *Password= nullptr;

signals:
    void SendUsername(const QString &name);
    void SendPassword(const QString &password);

private slots:
    void ReturnPressedForLineEdit1();
    void ReturnPressedForLineEdit2();

private:
    QString username;
    QString password;

private:
    Ui::Widget *ui; //HERE <----------------
};

cpp文件:
#include "widget.h"

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

    try
    {
        //Objects of UI
        Widget::Username = new QLineEdit();
        Widget::Password = new QLineEdit();
    }
    catch(std::bad_alloc &exp)
    {
        #ifndef Q_DEBUG
        qCritical() << "Exception caught: " << exp.std::bad_alloc::what();
        #endif
        abort();
    }
    catch(...)
    {
        #ifndef Q_DEBUG
        qCritical() << "Some exception caught";
        #endif
        abort();
    }

    Widget::username = "";
    Widget::password = "";


    //SIGNALS/SLOTS
    //QLineEdit
    QObject::connect(Widget::Username, &QLineEdit::returnPressed, this, &Widget::ReturnPressedForLineEdit1);
    QObject::connect(Widget::Username, &QLineEdit::returnPressed, Widget::Username, &QLineEdit::clear);

    QObject::connect(Widget::Password, &QLineEdit::returnPressed, this, &Widget::ReturnPressedForLineEdit2);
    QObject::connect(Widget::Password, &QLineEdit::returnPressed, Widget::Password, &QLineEdit::clear);


    return;
}

Widget::~Widget()
{
    delete Widget::Username;
    delete Widget::Password;
    delete Widget::ui;

    return;
}

void Widget::ReturnPressedForLineEdit1()
{
    if(Widget::Username->QLineEdit::text() == "")
        return;

    Widget::username.QString::clear();
    Widget::username += Widget::Username->QLineEdit::text();
    emit Widget::SendUsername(Widget::username);

    return;
}

void Widget::ReturnPressedForLineEdit2()
{
    if(Widget::Password->QLineEdit::text() == "")
        return;

    Widget::password.QString::clear();
    Widget::password += Widget::Password->QLineEdit::text();
    emit Widget::SendPassword(Widget::password);

    return;
}

然后,您可以在mainwindow.cpp构造函数中连接您自己的信号,如下所示:
//slots should be with (QString &string) args
QObject::connect(Mainwindow::objectOfYourOwnWidget, &Widget::SendUsername, this, &Mainwindow::GetUsername);
QObject::connect(Mainwindow::objectOfYourOwnWidget, &Widget::SendPassword, this, &Mainwindow::GetPassword);

关于c++ - 如何从主窗口访问另一个Windows ui?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61908845/

相关文章:

java - 使用 JNI 将字符串从 Java 传递到 C++

C++ ## 宏不起作用

python - 如何设置系统默认背景色?

c++ - 扩展 C++ 字符串成员函数

c++ - 检测到子进程因操作系统内存不足而被终止

python - setItemWidget 导致崩溃

QT Creator水平旋转框

c++ - 尝试使用共享库部署 Qt 应用程序时出错

c++ - shrink_to_fit() 用于无序容器?

c++ - C 枚举在 C++ 中无法识别