Как заменить ярлыки / подсказки пользовательского интерфейса во время выполнения приложения Qt в соответствии с контекстом?
Мы разрабатываем приложение Qt Desktop. Приложение может открывать несколько файлов по одному на каждой вкладке, и каждая вкладка (файл) имеет свой собственный контекст. Пользователь может открыть несколько файлов и переключаться между этими вкладками.
Например: Как и на одной вкладке Управление грузовиками, для действия (add_Vehicle) на панели инструментов должна отображаться подсказка "Добавить грузовик", а если на другой вкладке управления автомобилем то же действие, должна отображаться подсказка "Добавить автомобиль".
Есть много таких вещей:
Если я удаляю грузовик (т. Е. Автомобиль из вкладки "Управление грузовиком"), на нем должно появиться сообщение "Грузовик успешно удален". и если автомобиль (т. е. Автомобиль из вкладки "Управление автомобилем") удален, должно быть показано сообщение "Автомобиль успешно удален".
Есть несколько диалогов, в которых тексты напрямую устанавливаются на 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, и в случае, если у вас нет прямого доступа к ним (частным пользователям), может потребоваться механизм сигнала и слотов для их изменения.