Niestandardowe rysowanie QMenu

0

Grafik wymyślił, programista ma problem wyzwanie :D

Chciałbym na podstawie
https://doc.qt.io/qt-6/style-reference.html#menus
zrobić "super-hiper-na-wypasie" menu zgodne z wytycznymi,
niestety nie wszystko da się zrobić w CSS i trzeba zejść na niższy poziom :(

class MenuProxyStyle: public QProxyStyle{
public:
    using QProxyStyle::QProxyStyle;
    void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const override
    {
        
        QProxyStyle::drawControl(element, opt, p, w);
   }
};

menu.setStyle(new MenuProxyStyle(menu.style()));

Gdzie szukać przykładów, czy zostają tylko źródła Qt ?

1

Raczej źródła, i to w dodatku szczegółów pewnie w tych QCośtamPrivate będziesz musiał szukać.
Ale główne pytanie to jaki efekt chcesz Bracie @Marius.Maximus uzyskać.

0

najciekawsze zawsze w QCośtamPrivate 😉
Jedna z nielicznych wad C++ w stosunku do Delphi , w C++ trochę utrudnione jest zajrzenie do źródeł , w Delphi wszystko jest dostępne od reki, IDE na prawy przycisk myszy przenosi do implementacji w kodzie,
jak bym chciał debugować Qt to musiał bym zbudować całe Qt, bo tak w standardzie to mam tylko deklaracje funkcji w plikach H.
Już się tak przyzwyczaiłem do Visual Studio Code, że jak będę wracał do starych projektów w Delphi/Lazarus to bede musiał poszukać metody aby zintegrować VSCode z kompilatorem pascalowym.
Taka małą dygresja

Co do samego problemu z menu,
to chciałbym zrobić przezroczyste narożniki

QMenu nie reaguje na border-radius
ale elementy menu QMenu::item da się zaokrąglić
Wiec chciałem zobaczyć na ile można to poprawić za pomocą QProxyStyle

screenshot-20240411142041.png

0

Jedna z nielicznych wad C++ w stosunku do Delphi , w C++ trochę utrudnione jest zajrzenie do źródeł , w Delphi wszystko jest dostępne od reki, IDE na prawy przycisk myszy przenosi do implementacji w kodzie,

Nic nie stoi na przeszkodzie, żeby to co w Delphi zrobić w (biźniaczym) C++ Builder.

0

@davout: Ja już bym nie chciał do tego wracać, zresztą nie kojarzę aby C++ Builder i Delphi kompilowały na mojego ARM-a

0
Marius.Maximus napisał(a):

Co do samego problemu z menu,
to chciałbym zrobić przezroczyste narożniki

QMenu nie reaguje na border-radius
ale elementy menu QMenu::item da się zaokrąglić
Wiec chciałem zobaczyć na ile można to poprawić za pomocą QProxyStyle

screenshot-20240411142041.png

Spróbuj Bracie użyć przezroczystego tła dla menu używając style sheet'a:

QMenu {
     background-color: rgba( 255, 255, 255, 0);
     background: transparent;
}

EDIT:
I co @Marius.Maximus , pomogło?

A co do

Marius.Maximus napisał(a):

najciekawsze zawsze w QCośtamPrivate 😉
Jedna z nielicznych wad C++ w stosunku do Delphi , w C++ trochę utrudnione jest zajrzenie do źródeł , w Delphi wszystko jest dostępne od reki, IDE na prawy przycisk myszy przenosi do implementacji w kodzie,
jak bym chciał debugować Qt to musiał bym zbudować całe Qt, bo tak w standardzie to mam tylko deklaracje funkcji w plikach H.
Już się tak przyzwyczaiłem do Visual Studio Code, że jak będę wracał do starych projektów w Delphi/Lazarus to bede musiał poszukać metody aby zintegrować VSCode z kompilatorem pascalowym.
Taka małą dygresja

to Qt kiedyś miało zamknięte źródła, a te cyrki z ClassPrivate i pointerami do implementacji Q_D i Q_Q były sposobem na ukrycie szczegółów implementacji. Pierońsko utrudniało to życie jak było trzeba zrobić coś fikuśniejszego, czego twórcy Qt nie przewidzieli.

0

@MasterBLB: a może zabawa w prywatne Q_D i Q_Q jest po to aby ukryć implementacje i mieć niezmienny interfejs ?

Co do samego zaokrąglonego menu

  • menu->setWindowFlags(menu->windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
  • menu->setAttribute(Qt::WA_TranslucentBackground);
  • obliczamy QRegion z zaokrągleniami i ustawiamy menu->setMask(roudedRegion)
0

co do twojego screena z buttonami. To czy nie lepiej by było abyś wykorzystał skrypt co dałem wyżej w komentarzach do tworzenia buttonów i na tej podstawie spróbował pokombinować z QEVent jak w przykładzie co daję w załączniku?QEvent.7z

1 użytkowników online, w tym zalogowanych: 0, gości: 1