Qt: Как отобразить Ctrl + W вместо Ctrl + F4 в системном меню по умолчанию подокна? - PullRequest
3 голосов
/ 07 октября 2011

нужна быстрая помощь, поскольку я, вероятно, упускаю уловку, которая бы помогла с этой ситуацией в Qt (я использую последнюю версию Qt 4).

В моей QMdiArea я создаю несколько подокон.Все подокна имеют системное меню по умолчанию (минимизировать, развернуть, остаться сверху, закрыть, ... - это видно при щелчке правой кнопкой мыши на значке подокна).

Чтобы соответствовать тому, что я определилв главном меню моего приложения (ctrl + w, видимый для закрытия окон), Я не могу согласиться с тем, что отображаемый ярлык, связанный с Close, Ctrl + F4 в подоконниках 'Системное меню. Это должно быть Ctrl + w .Я пробовал разные вещи, включая установку глобального ярлыка для приложения (с setShortcutContext) ... но не повезло.

Закрыть имеет по умолчанию два ярлыка: Ctrl + w и Ctrl + F4 .Я хочу, чтобы оба продолжали работать, но это Ctrl + w , которое всегда должно отображаться.

На данный момент единственное решение, которое я вижу, это заменить системное меню(QMenu) ... но, похоже, много кода для такой простой задачи!

1 Ответ

0 голосов
/ 07 октября 2011

Вы можете попробовать установить его следующим образом:

ui->mdiArea->subWindowList().at(index)->systemMenu()->actions().last()->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W));

Пожалуйста, замените «индекс» подходящим индексом.Это сработало для меня.(ОБНОВЛЕНИЕ: это не работает, CTRL + W уже назначен ярлык для действия закрытия)

ОБНОВЛЕНИЕ:

Действие закрытия имеет дваназначенные ярлыки, и первый из них отображается в меню.Если вы поменяете заказ, вы увидите CTRL + W .

QList<QKeySequence> closeShorcuts = ui->mdiArea->subWindowList().at(0)->systemMenu()->actions().last()->shortcuts();
closeShorcuts.swap(0, 1);
ui->mdiArea->subWindowList().at(0)->systemMenu()->actions().last()->setShortcuts(closeShorcuts);

Обратите внимание, что в этом исходном коде нет проверки платформы;если вы запустите это на MAC, вы получите противоположный результат, а в X11 он выйдет за пределы списка (потому что есть только один ярлык: CTRL + W ).

...