QT 5.13.2.
Есть у меня тестовый проект: из родительского окна вызывается дочернее диалоговое окно. Окно модальное, это принципиально.
В дочернем окне PlainTextEdit. Как на сочетания Ctrl + + и Ctrl + - завязать zoomIn и zoomOut? QMenuBar c QAction’ами можно создать только программно, это работает, но плохо выглядит.
Можно обработать KeyPress:
void EditWindow::keyPressEvent(QKeyEvent *ev)
{
switch (ev->key())
{
case Qt::Key_Plus:
if (ev->modifiers() & Qt::ControlModifier)
emit doUp();
break;
case Qt::Key_Minus:
if (ev->modifiers() & Qt::ControlModifier)
emit doDown();
break;
}
}
но это не работает. Если заменить плюс и минус на Qt::Key_Up и Qt::Key_Down - работает. Но я хочу плюс и минус. Вот исходные файлы родительского окна:
#include "parentwindow.h"
#include "ui_parentwindow.h"
#include "childwindow.h"
ParentWindow::ParentWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::ParentWindow)
{
ui->setupUi(this);
}
ParentWindow::~ParentWindow()
{
delete ui;
}
void ParentWindow::on_pushButton_clicked()
{
ChildWindow *cw = new ChildWindow();
if (cw->exec() == QDialog::Accepted)
{
}
delete cw;
}
и окна дочернего:
#include "childwindow.h"
#include "ui_childwindow.h"
ChildWindow::ChildWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::ChildWindow)
{
ui->setupUi(this);
menubar = new QMenuBar(this);
mnu = menubar->addMenu(tr("Format"));
up = new QAction(tr("Up"));
up->setShortcut(Qt::CTRL + Qt::Key_Plus);
down = new QAction(tr("Down"));
down->setShortcut(Qt::CTRL + Qt::Key_Minus);
mnu->addAction(up);
mnu->addAction(down);
connect(up, SIGNAL(triggered()), ui->plainTextEdit, SLOT(zoomIn()));
connect(down, SIGNAL(triggered()), ui->plainTextEdit, SLOT(zoomOut()));
}
ChildWindow::~ChildWindow()
{
disconnect(ui->plainTextEdit, SLOT(zoomIn()));
disconnect(ui->plainTextEdit, SLOT(zoomOut()));
delete down;
delete up;
delete mnu;
delete menubar;
delete ui;
}
это где QMenuBar и работают нужные сочетания, но отвратный вид.
Можно или нормально прицепить QMenuBar, или завязаться на Ctrl + + и Ctrl + - без меню?