从插槽 Blackberry 10 获取 TextField->text()
Get TextField->text() from slot Blackberry 10
我是 Blackberry 10 开发的完全初学者。我正在开发一个应用程序,它应该从文本框中获取用户输入并搜索文本文件中是否出现该词。我正在使用 ActionItem 的 triggered() 信号来调用搜索。但是,当我尝试从插槽中获取用户输入时,它总是 returns 一个空字符串 ''。我犯了什么错误。
提前致谢。
代码如下:
main.qml
TextField {
objectName: "anagram"
hintText: "Enter anagram to search"
verticalAlignment: VerticalAlignment.Center
horizontalAlignment: HorizontalAlignment.Center
input {
submitKey: SubmitKey.Done
}
}
application.cpp
ActionItem *main = root->findChild<ActionItem*>("search");
bool res1 = QObject::connect(main, SIGNAL(triggered()), this, SLOT(onSearch()));
void ApplicationUI::onSearch()
{
qDebug() << "slot activated";
QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
AbstractPane *root = qml->createRootObject<AbstractPane>();
Application::instance()->setScene(root);
TextField* query = root->findChild<TextField*>("anagram");
//THE STRING BELOW ALWAYS RETURNS ''
QString search = query->text();
...
简介
当插槽 onSearch
被调用时,您实际上是在创建一个额外的 UI,与实际发出信号的信号无关。
由于anagram
的文本属性没有默认设置,所以你得出的结论是正确的;它总是会产生一个空字符串,因为该字段总是新创建的。
解决方案
您将需要使用与当前 UI(用户已输入数据)关联的 root
,而不是创建新的。
假设您已将 root
声明为 ApplicationUI 的数据成员,下面将执行您期望的(并且想要).
void ApplicationUI::onSearch()
{
qDebug() << "slot activated";
TextField* query = root->findChild<TextField*>("anagram");
QString search = query->text();
// ...
}
备选方案
您还可以通过在 Application::instance ()
返回的指向 AbstractPane
的指针上调用 scene()
来访问当前加载的场景(相当于您的代码段中的 root
) :
AbstractPane * current_scene = Application::instance ()->scene ();
QString search = current_scene->findChild<TextField*> ("anagram")->text ();
我是 Blackberry 10 开发的完全初学者。我正在开发一个应用程序,它应该从文本框中获取用户输入并搜索文本文件中是否出现该词。我正在使用 ActionItem 的 triggered() 信号来调用搜索。但是,当我尝试从插槽中获取用户输入时,它总是 returns 一个空字符串 ''。我犯了什么错误。
提前致谢。
代码如下:
main.qml
TextField {
objectName: "anagram"
hintText: "Enter anagram to search"
verticalAlignment: VerticalAlignment.Center
horizontalAlignment: HorizontalAlignment.Center
input {
submitKey: SubmitKey.Done
}
}
application.cpp
ActionItem *main = root->findChild<ActionItem*>("search");
bool res1 = QObject::connect(main, SIGNAL(triggered()), this, SLOT(onSearch()));
void ApplicationUI::onSearch()
{
qDebug() << "slot activated";
QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
AbstractPane *root = qml->createRootObject<AbstractPane>();
Application::instance()->setScene(root);
TextField* query = root->findChild<TextField*>("anagram");
//THE STRING BELOW ALWAYS RETURNS ''
QString search = query->text();
...
简介
当插槽 onSearch
被调用时,您实际上是在创建一个额外的 UI,与实际发出信号的信号无关。
由于anagram
的文本属性没有默认设置,所以你得出的结论是正确的;它总是会产生一个空字符串,因为该字段总是新创建的。
解决方案
您将需要使用与当前 UI(用户已输入数据)关联的 root
,而不是创建新的。
假设您已将 root
声明为 ApplicationUI 的数据成员,下面将执行您期望的(并且想要).
void ApplicationUI::onSearch()
{
qDebug() << "slot activated";
TextField* query = root->findChild<TextField*>("anagram");
QString search = query->text();
// ...
}
备选方案
您还可以通过在 Application::instance ()
返回的指向 AbstractPane
的指针上调用 scene()
来访问当前加载的场景(相当于您的代码段中的 root
) :
AbstractPane * current_scene = Application::instance ()->scene ();
QString search = current_scene->findChild<TextField*> ("anagram")->text ();