我必须为触摸屏软件制作一个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");}
}
答案 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
指针指针。