0

Qt デスクトップ アプリケーションを開発しています。アプリケーションは複数のファイルを各タブで 1 つずつ開くことができ、各タブ (ファイル) には独自のコンテキストがあります。ユーザーは複数のファイルを開き、これらのタブを切り替えることができます。

例: あるタブがトラック管理のように、ツールバーのアクション (add_Vehicle) はツールチップ「トラックの追加」を表示し、別のタブが車両管理の場合、同じアクションはツールチップ「車の追加」を表示する必要があります。

このようなものがたくさんあります:

  1. トラック (トラック管理タブから車両) を削除すると、「トラックが正常に削除されました」というメッセージ ボックスが表示されます。車 (つまり、車の管理タブからの車) が削除された場合、「車は正常に削除されました」というメッセージが表示されます。

  2. テキストが QtDesinger を介して QLabels に直接設定されるダイアログがいくつかあります。

この問題はどのように発生しますか?

以前は、このアプリケーションはトラック管理のみをサポートしていましたが、現在は同じアプリケーションで車両管理のサポートを追加しています。すべてのメッセージ/UI ラベル/ツールヒントは「トラック」を使用しています。開いたタブ(ファイル)に応じて変更したいと思います。

実行可能な思考ソリューション: (実行時に機能しない)

すべての UILabels/ToolTips/Messages は翻訳可能です [つまり、QObject::tr(..) で書かれています]。すべての場所でテキストを自動的に変更するタブ コンテキストに従って QTranslator をインストールすることを考えました。QTranslator ランタイムのインストールが機能しません。

これを行う別の方法はありますか?または、ポインタ/ヒントが非常に役立ちます。

4

2 に答える 2

0

ラベル/ツールチップなどのテキストはQtで簡単に変更できるため、問題はありません。クラス メソッドから適切なテキストを指定してQLabel::setTextおよびQToolTip::showTextメソッドを呼び出すだけです。

myTruck::myTruck(QWidget *parent) :
   QObject(parent)
{
   /* do whatever you do in your class constructor */
   <...>
   myLabel->setText("Truck");
   <...>
}

myTruck::~myTruck() :
   QObject(parent)
{
   /* do whatever you do in your class destructor */
   <...>
   myTooltip->showText("Truck deleted successfully");
   <...>
}

myLabelmyTooltipはおそらく MainWindow のメンバーであり、それら (プライベート メンバー) に直接アクセスできない場合は、それらを変更するために signal&slots メカニズムが必要になる場合があります。

于 2013-02-05T13:46:51.133 に答える
0

ファイル/タブはおそらくそれが管理するもの (「トラック」、「車」、「飛行機」) を認識しているため、この区別を行うには ID が必要です。

ツールチップの場合: 「現在の」ファイル/タブの変更を購読します。Aには、サブスクライブできるQTabWidgetシグナルがあります。void currentChanged(int index)現在のファイル/タブが変更された場合 (新しいファイルが開かれてフォーカスを取得したため、またはユーザーが別のファイル/タブに移動したため)、新しい現在のファイル/タブから ID を取得し、ツールヒントのテキストを適切に設定します。

メッセージボックスの場合: 「... は正常に削除されました」というメッセージボックスを表示する場合は、現在のファイル/タブの ID を取得し、これを使用して表示する必要があるメッセージを作成します。

于 2013-02-05T13:47:50.277 に答える