Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Show SVG file in QMenuBar corner part



  • Hi everyone,
    I'm working on an app, and I want to use a QMainWindow as a frameless window.
    So we want to display a logo front to the QMenuBar of this QMainWindow.

    Can you give a me the (best) way to draw an SVG image in the top left corner part of the menu bar?

    This what I wrote:

    QSvgWidget* widget = new QSvgWidget(":/WaveView/icon/appBig.svg",container);
    p_customBar->setCornerWidget(widget, Qt::TopLeftCorner);
    

    The problem of this solution, is the image don't fit to the parent QMenuBar (the QToolBar fit to the height of the QSvgWidget, and became ugly).
    In the best way, I want my icon fit height of toolbar and keep his ratio.

    Best regards,
    Romain

    [Moved to General and Desktop, added code tags ~kshegunov]



  • Hi! Haven't tested it, maybe it works if you set the QSvgWidget's maximumHeight to the height returned by QToolbar::iconSize().



  • Yeah! I think it would work too. But I want my component to be dynamic, I explain:
    I want my component to be resize if somebody through the code says for example "hey MenuBar change your height". I can do retro control mecanism, but I want in a first time to avoid crapy complex code if something already does it you know! =D
    If is the only way, I will do something like this.
    Thanks for youre answer



  • QToolbar has a property "iconSize" and QSvgWidget has a property "size". If my first suggestion turns out to work at all then you can use signals and slots to get automatic adjustment of size.



  • Ok I will try this mecanism and I will be back after that, thx Wieland!



  • Ok at least I used finally an QLabel:

    //Create our label that contain icon
    QLabel* iconLabel = new QLabel(p_customBar);
    QIcon icon(":/WaveView/icon/applicationLogoBig.svg");
    iconLabel->setPixmap(icon.pixmap(QSize(52,52)));
    //setPixmap(const QPixmap &)
    p_customBar->setCornerWidget(iconLabel, Qt::TopLeftCorner);

    I'm little embarrased because I have to precise an arbitrary size for QIcon to pixamp, but the component keep the ratio, fit the toolbar height, etc...
    But I reuse internal behaviour and I don't have to make some tricky code.
    Thx for answers
    Best regards


Log in to reply