42121


例えば日本語のキーボードや、中国語のキーボードのように、リストウィジェットを出してその後スムーズに元の編集へと帰りたいのですが、フォーカスがそちらの方へ移ってしまいます。  
すぐに元のエディタへと戻るように、フォーカスを変化させたいのですが、どうすればよろしいでしょうか？

ちなみに、テキストエディタは、`MainWindow`に備えられた`QGraphicsView`に、`QGraphicsScene`を備えた上で、セットされた`QTextEdit`の場合とします。

色々Focus系をいじってみたのですが、いまいちわかりませんでした。

**追記**  
前までは、releaseEvent内に入れていたコードを、リストウィジェットをshow()した後に入れ込めば、すぐにリストウィジェットが消え、元の処理に帰ることができました。

しかし、私が現在実装しようとしているコードは、なぜかフォーカスがはずれてしまい、カーソル自体が点滅しなくなり、どこにカーソルがあるのかわからなくなります。

focusWidget()で調べても、確かにその編集中のウィジェットがフォーカスを有していますし、なぜこのようなことが起るのかわかりません。  
どこにフォーカスが移ったとしても、その後フォーカスを、常にピンポイントでダイレクトにセットするような、そんな方法はご存知ありませんか？

以下はサンプルコードです。

[code]

    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()
    
[/code]


CC BY-SA 4.0
2018-03-04T03:01:26.513
42111
2018-08-24T13:55:18.033
2018-08-24T13:55:18.033
24284
24284
question
python qt pyside pyqt
Qtで新しいウィジェットを表示した後でも、フォーカスが移らないようにしたい。


此処を参考にしたら解決いたしました！

[show()イベント時にフォーカスを取られないで表示する方法](https://stackoverflow.com/questions/966688/show-
window-in-qt-without-stealing-focus)

[code]

    self.listwidget.setAttribute(QtCore.Qt.WA_ShowWithoutActivating)
    
[/code]

これでフォーカスを取られることなく、ふつうに打ち込むことができるようになりました。


CC BY-SA 3.0
2018-03-04T14:30:40.623
42121
2018-03-04T14:30:40.623
24284
42111
answer