Как заставить QToolButton выйти за край QToolbar?

Как заставить кнопку выходить за пределы QToolbar?

введите здесь описание изображения

Ниже приведен код, когда я создаю панель инструментов:

главное окно.h

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0)

private:
    QToolBar* _toolBar;
};

главное окно.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
   _toolBar = new QToolBar;
   QAction *actionAdd = new QAction(QIcon(":/images/add.png"), "", this);
   _toolBar->addAction(actionAdd);

    addToolBar(Qt::ToolBarArea::TopToolBarArea, _toolBar);

}

стиль.qss

QToolBar {
    background: #018ac4;
    height: 150px;

}

person e.n.shirokov    schedule 21.02.2018    source источник
comment
Было бы полезно, если бы вы опубликовали код о том, как вы это делаете.   -  person Bobur    schedule 21.02.2018
comment
я добавил код   -  person e.n.shirokov    schedule 21.02.2018
comment
Скорее всего, дело в стиле. Я не мог заставить это появиться в моем проекте, используя данный код. У вас есть этот проект в github или другом? Если хочешь, могу глянуть.   -  person Bobur    schedule 21.02.2018
comment
Я не думаю, что вы можете составить свою панель инструментов таким образом, то есть нарисовать дочерний виджет за пределами его родителя. Единственный способ сделать кнопку независимой и наложить ее на панель инструментов.   -  person vahancho    schedule 21.02.2018
comment
qtitanribbon должен быть хорошим справочником для профессионального знакомства   -  person saeed    schedule 21.02.2018
comment
@ Бобур. Это простое приложение (github.com/enshirokov/toolbar)   -  person e.n.shirokov    schedule 21.02.2018
comment
Я попробовал ваш код и не увидел ничего похожего на вашу картинку. Все так, как и ожидалось. Я не знаю, как ты получил это окно.   -  person Bobur    schedule 21.02.2018
comment
@Bobur Я нарисовал картинку в редакторе. Я хочу сделать пользовательскую панель инструментов, как на картинке.   -  person e.n.shirokov    schedule 21.02.2018
comment
Ох, простите. Я совершенно неправильно понял вопрос. Извини ((   -  person Bobur    schedule 21.02.2018
comment
Возможный дубликат QWidget Overflow   -  person Mohammad Kanan    schedule 21.02.2018
comment
Не могли бы вы указать версию Qt, потому что код хорошо работает на Qt 5.3.1   -  person JustWe    schedule 22.02.2018


Ответы (2)


Как было сказано ранее, правильно решить эту проблему с помощью QtWidgets невозможно. Однако я вижу два варианта визуального создания такого эффекта:

  1. Уберите кнопку с панели инструментов и добавьте ее в главное окно, но не добавляйте в макет. Обычно я бы сказал изменить его положение при изменении размера, но, поскольку он находится в левом верхнем углу, вы можете просто вызвать setGeometry() один раз при запуске и не беспокоиться об этом позже. Вы, вероятно, должны добавить в последнюю очередь или вызвать rise().

  2. Сделайте так, чтобы кнопка торчала, хотя на самом деле это не так. Сделайте панель инструментов такой же большой, как кнопка, но закрасьте нижнюю часть панели инструментов более ярко-синим цветом, чтобы она выглядела так, как будто она является частью виджета под ней.

person SteakOverflow    schedule 22.02.2018

С виджетами это невозможно. QWidget не может рисовать за пределами своей области. См. этот ответ: https://stackoverflow.com/a/48302076/6165833.

Однако QToolBar на самом деле не является родителем QAction, потому что addAction(QAction *action) не принимает в собственность. Так что, возможно, QMainWindow может нарисовать ваш QAction так, как вы хотите, но, насколько я знаю, это невозможно сделать через общедоступный API Qt.

Что вы можете сделать, так это использовать QML (но тогда вам нужно будет использовать QML для всего окна).

person ymoreau    schedule 21.02.2018