2

QT アプリケーション内に urxvt ターミナルを埋め込む際に問題があります。以下は単純化されたコード例です。QT ウィンドウを作成し、(-embed パラメータを使用して) 内部に urxvt ターミナルを埋め込むと、フォーカスに問題があります。ウィンドウが作成されると、ウィンドウへの最初のクリックで埋め込み端末にフォーカスが置かれます -> すべて問題ありませんが、ウィンドウを 2 回目にクリックすると、通常のキーボードとマウスの入力は引き続き機能しますが、端末はフォーカスを失ったように見えます。しかし、端末自体は考えているようで、フォーカスがありません。フォーカスがありませんが、イベントはまだ埋め込みウィンドウに送信されているようです。C++ QT バインディングを使用すると、同じ問題が発生します。

.Xdefaults に設定を追加する (および必要な xrdb -load .Xdefaults を実行する) と、うまく表示されます: URxvt*fading: -40

簡単な例を次に示します。

import  sys 
from PyQt4.QtCore import *
from PyQt4.QtGui import *


class embterminal(QWidget): 

    def __init__(self):
        QWidget.__init__(self)
        self.setGeometry(1,1,600,400)
        self.process = QProcess(self)

        self.terminal = QX11EmbedContainer(self)
        layout = QVBoxLayout(self)
        layout.addWidget(self.terminal)

        self.terminal.showMaximized();

        self.process.start('urxvt',['-embed', str(self.terminal.winId())])

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main = embterminal()
    main.show()
    sys.exit(app.exec_())`
4

1 に答える 1

2

QX11EmbedContainerのドキュメントから:

QX11EmbedContainer は、GTK+ などの Qt 以外のツールキットから XEmbed ウィジェットを埋め込むことができます。任意の (非 XEmbed) X11 ウィジェットも埋め込むことができますが、ウィンドウのアクティブ化やフォーカス処理などの XEmbed 固有の機能は失われます。

したがって、おそらく urxvt (またはそのバージョン) はXEmbed Protocolの必要なすべての機能をサポートしていません。

ウェブ検索で次のコメントが見つかりました。

urxvt -embed はほぼ動作します。それとすべてをサポートしていると主張していますが、クリックしてもXEMBED_REQUEST_FOCUSを送信しません。これは、フォーカスを失った後にフォーカスを取り戻す方法がないことを意味します。

于 2013-11-05T18:40:53.480 に答える