Qtで新しいウィジェットを表示した後でも、フォーカスが移らないようにしたい。
例えば日本語のキーボードや、中国語のキーボードのように、リストウィジェットを出してその後スムーズに元の編集へと帰りたいのですが、フォーカスがそちらの方へ移ってしまいます。
すぐに元のエディタへと戻るように、フォーカスを変化させたいのですが、どうすればよろしいでしょうか?
ちなみに、テキストエディタは、MainWindow
に備えられたQGraphicsView
に、QGraphicsScene
を備えた上で、セットされたQTextEdit
の場合とします。
色々Focus系をいじってみたのですが、いまいちわかりませんでした。
追記
前までは、releaseEvent内に入れていたコードを、リストウィジェットをshow()した後に入れ込めば、すぐにリストウィジェットが消え、元の処理に帰ることができました。
しかし、私が現在実装しようとしているコードは、なぜかフォーカスがはずれてしまい、カーソル自体が点滅しなくなり、どこにカーソルがあるのかわからなくなります。
focusWidget()で調べても、確かにその編集中のウィジェットがフォーカスを有していますし、なぜこのようなことが起るのかわかりません。
どこにフォーカスが移ったとしても、その後フォーカスを、常にピンポイントでダイレクトにセットするような、そんな方法はご存知ありませんか?
以下はサンプルコードです。
from PySide import QtCore
from PySide import QtGui
import sys
class MainWindow(QtGui.QMainWindow):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent=None)
self.mainview = QtGui.QGraphicsView()
self.mainscene = QtGui.QGraphicsScene()
self.maintextedit = CustomTextEdit()
self.mainscene.addWidget(self.maintextedit)
self.mainview.setScene(self.mainscene)
self.setCentralWidget(self.mainview)
class CustomTextEdit(QtGui.QTextEdit):
def __init__(self,parent=None):
super(CustomTextEdit,self).__init__(parent=None)
self.listwidget = QtGui.QListWidget()
self.listwidget.setFocusPolicy(QtCore.Qt.NoFocus)
def keyPressEvent(self,event):
self.listwidget.show()
self.listwidget.clearFocus()
self.activateWindow()
self.setFocus()
return QtGui.QTextEdit.keyPressEvent(self,event)
def keyReleaseEvent(self,event):
self.listwidget.setHidden(True)
return QtGui.QTextEdit.keyReleaseEvent(self,event)
def main():
try:
QtGui.QApplication([])
except Exception as e:
print(20,e)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(QtGui.QApplication.exec_())
if __name__ == "__main__":
main()