2014-10-28 48 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