2014-10-28 98 views
0

我必须为触摸屏软件制作一个GUI,它与文本编辑处于同一窗口,我正在考虑使用一组有限的字符进行简单的操作,(我以后也必须为其他窗口制作PIN码垫)我想到的方法是对每个按钮完成的文本修改进行硬编码,我正在面对的问题是获取实际上具有焦点的文本编辑(由用户光标)Qt在屏幕键盘上,如何获得选定的文本编辑

所以我想知道如何找出某个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

您可以通过['QApplication :: focusWidget'](http://qt-project.org/doc/qt-5/qapplication.html#focusWidget)找出哪个部件具有焦点。 – thuga 2014-10-28 09:51:54

+1

*“有什么问题”*没有足够的信息要知道。 'on_q_btn_clicked()'被调用了吗?你可以设置一个断点或弹出一个[QMessageBox](http://qt-project.org/doc/qt-5/qmessagebox.html)来找出? – HostileFork 2014-10-28 10:15:35

+0

另请注意,单击按钮可能会改变焦点,[请参阅此问题](http://stackoverflow.com/questions/2011423/)以了解关于焦点策略的问题。您可能会检查是否发生了点击事件。 – HostileFork 2014-10-28 10:21:44

回答

0

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

我会建议使用一个指针来保存修改后的地址QTextEdit只要有一个焦点。因此,您将始终知道哪些是最近的焦点文本编辑,并不断追加新文本。

您将不得不编写自己的继承QTextEdit的类,并执行QTextEdit::focusInEvent,您将指向上述指针指向this指针。

+0

或者只是将按钮的[focus policy](http://qt-project.org/doc/qt-5/qwidget.html#focusPolicy-prop)设置为['Qt :: NoFocus'。](http: //qt-project.org/doc/qt-5/qt.html#FocusPolicy-enum)。 – thuga 2014-10-28 12:43:55

+0

@thuga,是的。即使如此,他也可以。 :)如果由于某种原因他需要在QPushButton :: focusInEvent上做任何事情,那么他将不得不维护一个指针。 – nnb 2014-10-28 12:48:17

+0

嗯,我对Qt真的很陌生,你能描述一下这个过程还是链接我一些类似的工作? – 2014-10-28 13:39:58

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 
    ... 
} 
... 
+0

我包括我的代码,如果你可以检查出来。 – 2014-10-28 10:17:40