
私はKeePassXに落ち着いたUbuntu 12.04の下でパスワードマネージャーを探し始めました。 些細なことではないにしても、それは私に完全に合っていました。Ubuntu12.04ではGnome Classicを使用し、インジケータアプレットは数時間/システムトレイで完了します。 このアプレットは、マウスの左ボタンでプログラムアイコンをクリックしてメニューを描画し、右クリックすると独自のメニューを描画します。 KeePassXをトレイに最小化すると、そこから復元することはできません。
私はいくつかの方法で問題を解決しようとしました:私はフォーラムに書き込もうとしましたが、2011年以来ハングしている同じバグを見つけましたが、著者はKeePassX 2にすべての力を投げ入れ、最初のバージョンを放棄したようです。
さて、私は震えている生き物ですか、それともプログラマーですか? 私は問題を自分で解決することに決めました。つまり、システムトレイメニューからメインウィンドウを表示できるように、システムトレイメニューに新しいアイテムを追加しました。
私はすぐにあなたに警告します、多くはこの記事に興味がないでしょう、これはQtでの私の最初の経験であり、1999年にC / C ++を書いた最後のとき、私は基本的なことだけを覚えています。 記事を書くことにしました これは、OpenSourceプログラムをQtに変更した最初の成功例であり、おそらく誰かに役立つでしょう。
UPD自転車を発明したことがわかりました。 それはすべてQSystemTrayIconをStatusNotifierItemsにリメイクするsni-qtパッケージの障害です。 パッケージを削除した後、アイコンは別のトレイに移動しました。そこで、クリックは正常に機能します。 コメントをありがとう、 inkvizitor68sl 。
まだ興味があるなら、猫へようこそ。
プロジェクトのセットアップ
ここからソースコードをダウンロードし、解凍します。 ソースフォルダーで作業を続けます。
必要なライブラリとQt Creatorを同時にインストールします
$ sudo apt-get install build-essential qt4-qmake libxtst-dev qtcreator
すべてのライブラリが適切に配置されていることを確認します。
$ qmake && make
すべてが正常である場合、プロジェクトはコンパイルされ、binディレクトリからプログラムを実行できます。
Qt Creatorを実行し(アプリケーション/プログラミングにあります)、keepassx.proプロジェクトを開きます

デバッグを有効にすることもできます。KeePassXでは、src.proの変数を明示的に設定することで有効にできます。

プロジェクトが正しく構成されていることを確認します:Build-> Build All、そしてRunボタン。
メニュー項目を追加
Qtは、コンポーネントが特定のイベント(アクションと呼ばれる)を公開するときにイベントモデルを使用し、これらのイベントをサブスクライブできます。
まず、新しいイベントを追加します。 MainWindow.uiフォームを開き、[アクションエディター]タブで新しいイベントを追加します

保存しますが、ここで数時間かかった最初の驚きがあります。QtCreatorはフォームコードにギャグを追加します。 そのため、テーブル要素(現在のグループのパスワードのリストが右上のフォームに表示されます)をダブルクリックし、「1」列を削除する必要があります。
次に、このアクションをメニューに追加します。 mainwindow.cppを開き、setupMenusメソッドの最後に移動して、次のようにコードを変更します。
SysTrayMenu = new QMenu(APP_DISPLAY_NAME,this); SysTrayMenu->addAction(ShowHideAction); // , ShowHideAction SysTrayMenu->addAction(FileUnLockWorkspaceAction); SysTrayMenu->addSeparator(); SysTrayMenu->addAction(FileExitAction); SysTray->setContextMenu(SysTrayMenu);
次に、メニュー項目をクリックしたときに呼び出されるメソッドを作成します。
不要なトラブルなしに、mainwindow.cppの最後に書き込みます
void KeepassMainWindow::OnShowHide(){ OnSysTrayActivated(QSystemTrayIcon::Trigger); }
つまり、既存のメソッドを呼び出すだけです。これは、ユーザーがトレイアイコンをクリックしたときに機能するはずですが、機能しません。
ヘッダーを忘れないでください:mainwindow.hを変更し、プライベートスロットに行を追加します
void OnShowHide();
最後に、ShowHideActionイベントをOnShowHideメソッドにバインドする必要があります。 setupConnections()メソッドの最後に、以下を追加します
connect(ShowHideAction,SIGNAL(triggered()), this, SLOT(OnShowHide()));
すべてを保存して実行しようとします。 すべてが正しく完了すると、新しいメニュー項目が表示されます。

パッケージのインストールとアセンブリ
ここで、システムに新しいバージョンをインストールします。 記事の冒頭で行ったのと同じ方法ですべてを再コンパイルした場合に備えて、ターミナルに移動してから実行します
sudo checkinstall
Checkinstallはいくつか質問をしますが、デフォルトですべてを残すことができますが、パッケージを更新するときに古いバージョンにロールバックしないようにバージョンを0.4.3-1などに変更することをお勧めします。
チームが機能すると、すべて、インストールされたKeePassXを取得すると同時に、別のマシンにインストールできる.debパッケージを取得します。
ソースはここから入手できます: github.com/relgames/keepassx