LINUX.ORG.RU

QT QMenuBar в диалоговом окне, или как связать сочетания Ctrl + + на слот zoomIn

 , , , ,


0

1

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 + - без меню?

★★★