我正在研究一個自定義Qt按鈕,該按鈕允許您在雙擊按鈕時編輯該按鈕上的文本。當按鈕被雙擊時,QLineEdit出現在按鈕上的文本允許用戶編輯按鈕上的文本的位置。我的要求是,如果用戶點擊應用程序窗口中的任何地方,QLineEdit應該消失並取消編輯操作。這在某些情況下有效。具體來說,如果我點擊任何能夠輸入文本的東西,它就可以工作。窗口的其他部分不能按預期工作。我將點擊應用程序窗口的一個空白部分,並且QLineEdit保持其焦點。在這些情況下我如何消除焦點?如何在窗口上的任何其他位置點擊時從QLineEdit中移除焦點
回答
我發現了一個似乎可行的解決方案,但如果有其他選項,我仍然可以開放其他選項。我使用的是PyQt4,所以我的例子是在Python中:
創建QLineEdit的子類只是爲了我有一個新類型。我不想或不需要在所有QLineEdit實例上使用這種行爲;只是這些具體的。
class MyLineEdit(QtGui.QLineEdit):
pass
現在,在我的QMainWindow子類中,我重寫了mousePressEvent()
實現。它獲取當前關注的小部件。如果該小部件的類型爲MyLineEdit
,請清除焦點。
class MyMainWindow(QtGui.QMainWindow):
def ...
def mousePressEvent(self, event):
focused_widget = QtGui.QApplication.focusWidget()
if isinstance(focused_widget, MyLineEdit):
focused_widget.clearFocus()
QtGui.QMainWindow.mousePressEvent(self, event)
def ...
這讓我我在尋找這樣如果用戶點擊應用程序的窗口上的任何地方,重點是清除行爲。
編輯:我沒有找到一個警告。我在主窗口中有一個QTreeView
。如果用戶單擊樹視圖,則焦點不會從文本編輯字段中移除。
抓住你的父裝飾件的clicked()信號,並打電話yourLabel->clearFocus()(不幸的是,它不是一個插槽,使事情更復雜)。
定義一個你自己調用yourLabel-> clearFocus()的槽不應該太複雜。 :) – Exa 2010-12-17 13:10:53
不幸的是,只有當你在包含的小部件內部單擊時纔有效。根據我的需要,並非包含許多其他小部件的窗口中的任何其他位置。 – 2010-12-17 16:53:18
我跟着格蘭特Limberg指令在這裏,但想通了,在我的情況下,簡單:
QApplication.focusWidget().clearFocus()
會解決這個問題。
如果用C++做我會做線沿線的東西:
connect(myWidgets->MyLineEdit, SIGNAL(returnPressed()), this, SLOT(onLineEditDone());
void onLineEditDone()
{
myWidgets->MyLineEdit->clearFocus();
}
因爲我會用editingFinished()
代替returnPressed()
,或許這種特殊情況下,但我不會用textChanged(QString)
。
- 1. 如何在Javafx中點擊窗口中的其他位置時丟失文本框焦點
- 2. 如何在關閉事件中從wpf窗口移除焦點?
- 3. 如何從EmberJS中點擊的按鈕中移除焦點?
- 4. 當窗口已經有焦點時,如何讓窗口移動到Gnome中其他窗口的頂部?
- 5. 將焦點從任何地方移除
- 6. 如何在任何其他控件點擊時清除文本
- 7. 嘗試在單擊其他任何位置後在下拉菜單中刪除類,然後單擊其中的其他任何位置,然後點擊knockout.js
- 8. 如何在外部點擊時從Infragistics超網格單元中移除焦點?
- 9. 如何從MyGUI Widget中移除焦點?
- 10. 如何通過用戶點擊或在其他位置滑動來移除UIView?
- 11. 從窗體中移除焦點
- 12. 如何刪除正在改變其位置屬性的窗口焦點,以便主窗口不被阻塞。 WPF
- 13. 如何防止輸入字段在用戶點擊屏幕中的其他位置時失去焦點?
- 14. 在Qt中設置QLineEdit焦點
- 15. 如何使用Perl在GTK窗口中點擊鼠標位置?
- 16. 如何從單一EDITTEXT移除焦點
- 17. 如何在該行的任何位置點擊時觸發點擊該「鏈接」?
- 18. 從FpSpread中移除焦點
- 19. 如何在JavaScript模式窗口上設置焦點?
- 20. 如何在頁面加載時從TextInputLayout中移除焦點?
- 21. 如何隱藏光標線,當焦點在vim中的其他窗口
- 22. 如何在焦點位於緩衝區列表中的其他窗口中實時顯示緩衝區內容
- 23. 如何檢測任何窗口標題欄上的點擊?
- 24. 如何在點擊屏幕上的任意位置時刪除登錄面板
- 25. 如何防止其他程序的特定窗口從偷焦點(C#?)
- 26. 當我點擊任何其他元素時如何刪除ReactJS中的類?
- 27. 如何獲得子窗口通過點擊按鈕將窗口焦點(IE)
- 28. 如何在點擊時刪除按鈕的焦點邊框?
- 29. 移除焦點並點擊活動 - Jquery
- 30. 如何在SearchView上的任何位置檢測點擊
+1'clearFocus()'是我所需要的。謝謝! – 2012-03-28 15:37:25