У меня есть собственный виджет, который расширяет QMainWindow
, Там я добавляю ряд QAction
s в строке меню вместе с сочетаниями клавиш для каждого, и они работают нормально. Теперь я хочу удалить некоторые из этих действий из строки меню, но я хочу оставить ярлыки включенными (пользователь может узнать о доступности ярлыков из Помогите диалог). Поэтому сначала я решил, что сделаю действия невидимыми.
Это не сработало, поэтому я думаю, что действие не может быть невидимым, если ярлыки должны работать. Поэтому я добавил его в главное окно, но они все еще не работают. Есть идеи, как мне заставить это работать? Вот мой код Все, что должно произойти, есть в методе. someMethod
,
class MyWidget: public QMainWindow {
public:
MyWidget();
};
MyWidget::MyWidget() {
QAction *myAct = new QAction(tr("&Some Text"), this);
fNextmyActPageAct->setShortcut(QKeySequence(Qt::Key_Right));
myAct->setVisible(false); //adding this does not work
connect(myAct, SIGNAL(triggered()), this, SLOT(someMethod()));
...
QMenu *someMenu = menuBar()->addMenu(tr("&Some Menu"));
someMenu->addAction(myAct); //this works, the option shows up in the menu 'Some Menu' and the shortcut works
this->addAction(myAct); //does not work
}
Я проверил этот код, и он работает нормально:
QAction* myAct = new QAction(this);
myAct->setShortcut(Qt::Key_Right);
connect(myAct, SIGNAL(triggered()), this, SLOT(someMethod()));
this->addAction(myAct);
Не добавлять QAction
в вашем меню Bar.
Ты можешь использовать QShortcut
и передать ключ, целевой виджет и соответствующий слот в качестве параметров его конструктору. Просто поместите это в конструктор MyWidget
:
QShortcut * shortcut = new QShortcut(QKeySequence(Qt::Key_Right),this,SLOT(someMethod()));
shortcut->setAutoRepeat(false);