Как заменить ярлыки / подсказки пользовательского интерфейса во время выполнения приложения Qt в соответствии с контекстом?

Мы разрабатываем приложение Qt Desktop. Приложение может открывать несколько файлов по одному на каждой вкладке, и каждая вкладка (файл) имеет свой собственный контекст. Пользователь может открыть несколько файлов и переключаться между этими вкладками.

Например: Как и на одной вкладке Управление грузовиками, для действия (add_Vehicle) на панели инструментов должна отображаться подсказка "Добавить грузовик", а если на другой вкладке управления автомобилем то же действие, должна отображаться подсказка "Добавить автомобиль".

Есть много таких вещей:

  1. Если я удаляю грузовик (т. Е. Автомобиль из вкладки "Управление грузовиком"), на нем должно появиться сообщение "Грузовик успешно удален". и если автомобиль (т. е. Автомобиль из вкладки "Управление автомобилем") удален, должно быть показано сообщение "Автомобиль успешно удален".

  2. Есть несколько диалогов, в которых тексты напрямую устанавливаются на QLabels через QtDesinger.

Как возникает эта проблема?

Ранее приложение поддерживало только управление грузовыми автомобилями, теперь мы добавляем поддержку управления автомобилями в том же приложении. Все сообщения / метки пользовательского интерфейса / подсказки используют "Грузовик". Теперь мы хотим изменить его в соответствии с открытой вкладкой (файлом).

Возможное решение для мысли:(не работает во время выполнения)

Все UILabels/ToolTips/Messages могут быть переведены [т.е. написаны с помощью QObject::tr(..)]. Мы подумали об установке QTranslator в соответствии с контекстом вкладки, который автоматически изменит текст во всех местах. Установка QTranslator во время выполнения не работает.

Есть ли другой способ сделать это? Или любые указатели / подсказки будут очень полезны.

2 ответа

Файл / вкладка, вероятно, будет знать, чем он управляет ("Грузовик", "Автомобиль", "Самолет"), поэтому для создания этого распределения потребуется идентификатор.

Для всплывающих подсказок: Подписаться на изменения "текущего" файла / вкладки. QTabWidget имеет сигнал void currentChanged(int index) на который вы можете подписаться. Когда текущий файл / вкладка изменится (либо потому, что новый файл открыт и получает фокус, либо потому, что пользователь вставил вкладку в другой файл / вкладку), извлеките идентификатор из нового текущего файла / вкладки и установите текст всплывающих подсказок соответствующим образом.

Для ящиков сообщений: Если вы хотите отобразить окно сообщений для "... успешно удалено", извлеките идентификатор текущего файла / вкладки и используйте его для создания сообщения, которое вам нужно показать.

Я не вижу проблемы, так как текст внутри ярлыков / подсказок и т. Д. Легко изменить в 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");
   <...>
}

myLabel и myTooltip, вероятно, являются членами MainWindow, и в случае, если у вас нет прямого доступа к ним (частным пользователям), может потребоваться механизм сигнала и слотов для их изменения.

Другие вопросы по тегам