因此,我在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/