Qt屏幕键盘,如何选择文本编辑

时间:2014-10-28 09:48:28

标签: qt qt-creator on-screen-keyboard

我必须为触摸屏软件制作一个GUI,它与文本编辑在同一个窗口上,我想用一组有限的字符来简单的事情(我还要为其他窗口制作PIN Pads我正在考虑的方法是硬编码每个按钮完成的文本修改,我面临的问题是获得实际具有焦点的TextEdit(由用户的光标选择)

所以我想知道如何找出某个TextEdit目前是否有焦点?

此外,如果有更好的方法来做这件事吗?

编辑: 这是我的新代码,它有什么问题?

#include "settings2.h"
#include "ui_settings2.h"

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

}

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

void Settings2::on_q_btn_clicked()
{



    QTextEdit *textedit = qobject_cast<QTextEdit*>(QApplication::focusWidget());
    if(textedit){
    textedit->setText("aze");}

}

2 个答案:

答案 0 :(得分:0)

Per @ thuga的评论QApplication::focusWidget

如果你想确定焦点窗口小部件是特定类别的窗口小部件,你可以使用qobject_cast,如果该转换有效,它将只返回一个非空指针:

QLineEdit *lineedit = qobject_cast<QLineEdit*>(widget);
QTextEdit *textedit = qobject_cast<QTextEdit*>(widget);
...
if (lineedit) {
    // do QLineEdit stuff with lineedit
    ...
}
if (textedit) {
    // do QTextEdit stuff with textedit
    ...
}
...

答案 1 :(得分:0)

您试图让QTextEdit成为焦点的方式是错误的。此外,只要您点击屏幕键盘上的按钮,焦点就会转移到该键,而不会停留在QTextEdit上。

一旦有人关注,我建议使用指针来保存修改后的QTextEdit的地址。因此,您将始终知道哪个是最后一个文本编辑焦点,并继续将新文本附加到该文本。

您必须编写自己的继承QTextEdit的类并实现QTextEdit::focusInEvent,您将指向上面提到的this指针指针。