В одном приложении мне нужно сделать «чистый» шорткат, то есть действие, которое бы выполнялось только при нажатии горячих клавиш, а визуальная кнопка не создавалась бы.
Я делаю QAction, задаю ему комбинацию горячих клавиш. Кладу эту QAction на QToolBar, создаю коннект. При добавлении действия, на QToolBar появляется кнопка. И мне эту кнопку надо скрыть.
Из документации выяснилось, что даже если получить указатель на созданную кнопку, то скрыть её невозможно. Методы setVisible(false) или hide() для такой кнопки работать не будут. Вместо этого предлагается делать setVisible(false) для QAction:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QAction *action = new QAction(this);
action->setIcon( QIcon(QApplication::style()->standardIcon(QStyle::SP_FileIcon)) );
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P));
// Соединение для отладки нажатия
connect(action, &QAction::triggered, this, &MainWindow::onAction);
// Действие добавляется на панель
ui->mainToolBar->addAction(action);
// Выясняется кнопка, которая была создана и обрабатывает данное действие
// QToolButton* currentButton=qobject_cast<QToolButton*>(ui->mainToolBar->widgetForAction(action));
// Кнопка скрывается путем скрывания действия...
action->setVisible(false);
}
void MainWindow::onAction()
{
qDebug() << "onAction()";
}
Проблема в том, что если скрыть действие action->setVisible(false), то действие перестает выполняться. И. соответственно, комбинация горячих клавиш не работает.
Вопрос: как поместить на тулбар действие так, чтобы добавилась только комбинация клавиш. А самой кнопки бы не создаалось или она была не видна?