【发布时间】:2013-12-29 13:03:35
【问题描述】:
大家好, 我正在尝试从我的 qt 应用程序发送 http post 请求。我读了很多书,但仍在努力获得一些信号和插槽的概念。如果有人可以从这里帮助我,那就太好了..
这是我的 qml 代码 sn-p:
TextField { id: u_name; placeholderText: userText(); Layout.fillWidth: true; style: StyleTextField {} }
TextField { id: p_text; echoMode: TextInput.Password; Layout.fillWidth: true; style: StyleTextField {} }
Button {
id: signInButton
text: "Sign In";
style: StyleButton {}
Layout.fillWidth: true;
//Layout.alignment: Qt.AlignTop;
signal esLoginClicked()
onClicked: {
if (u_name.text.length) Settings.userText = u_name.text;
if (p_text.text.length) Settings.passText = p_text.text;
signInButton.esLoginClicked().connect(esLogin(u_name.text, p_text.text));
page_stack.pop();
}
}
在这里,我试图从用户那里获取用户名和密码,并希望将其传递给我在头文件中使用我仅在此处创建的信号 esLoginCLicked() 声明的插槽“esLogin”。我的头文件是这样的……
Q_OBJECT
Q_PROPERTY(QString userText READ userText WRITE setUserText NOTIFY userTextChanged)
Q_PROPERTY(QString passText READ passText WRITE setPassText NOTIFY passTextChanged)
public:
static esQuickSettings *instance(void);
public:
QString userText(void);
QString passText(void);
// void esLoginClicked(void);
// void esLoginClicked(const QString& userText, const QString passText);
public:
void setUserText(const QString& user);
void setPassText(const QString& passt);
void esLogin(const QString& userText, const QString& passText);
signals:
void userTextChanged(void);
void passTextChanged(void);
但不知何故,我无法使其工作,并且在这里缺少一些关键概念来使信号和插槽工作。
P.S:我想从 QML 获取输入并放入插槽中,该插槽将在 cpp 文件中具有与标题相对应的定义。
【问题讨论】:
-
“但不知何故我无法让它工作”->您到底面临什么错误?顺便说一句,你能修复格式吗? u_name 和 p_text 是什么?
-
它是说...TypeError: 对象 esQuickSettings(0x2a046a0) 的属性 'esLogin' 不是函数..
-
我知道为什么这是错误的,因为 esLogin 不是我在头文件中定义的属性...我已将其定义为 Slot....但使用 slot 我不知道如何连接此插槽带有我在 qml 中创建的信号
-
不能用普通的
QObject::connect(object, SIGNAL(esLoginClicked(const QString&, const QString&)), &foo, SLOT(esLogin(const QString&, const QString&)));吗? -
只是想明白...我会在我的头文件中声明这个连接并在我的cpp文件中定义esLogin()方法,但是我的QML中的数据会传递给这个方法..