Context Menu
A right click menu that can attach to any Qt widget.
Loading preview…
Live C++Source and licences
#include <QApplication>
#include <QFile>
#include <QHBoxLayout>
#include <QLabel>
#include <QPainter>
#include <QStandardItemModel>
#include <QUrl>
#include <QVBoxLayout>
#include <array>
#ifdef SHADCN_GALLERY_MEDIA
#include <shadcn/media.hpp>
#endif
#include <shadcn/shadcn.hpp>
QWidget* example(QWidget* parent = nullptr) {
using namespace shadcn;
auto* canvas = new QWidget(parent);
canvas->setAutoFillBackground(true);
auto* outer = new QHBoxLayout(canvas);
outer->setContentsMargins(32, 32, 32, 32);
auto* host = new QWidget(canvas);
auto* layout = new QVBoxLayout(host);
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(16);
outer->addStretch();
outer->addWidget(host, 0, Qt::AlignCenter);
outer->addStretch();
auto* target = new Card(host);
target->setFixedSize(300, 180);
auto* text = new QLabel("Right click here", target);
text->setAlignment(Qt::AlignCenter);
target->content().addWidget(text);
auto* menu = new ContextMenu(target);
menu->addItem("Back");
menu->addItem("Forward");
menu->addItem("Reload");
menu->attach(*target);
layout->addWidget(target);
return canvas;
}
Installation
- Source
- Installed package
add_subdirectory(shadcn-cpp)
target_link_libraries(app PRIVATE shadcn::widgets)
find_package(shadcn CONFIG REQUIRED)
target_link_libraries(app PRIVATE shadcn::widgets)
Usage
#include <shadcn/navigation.hpp>
shadcn::ContextMenu menu(parent);
menu.addItem("Copy", [] { /* copy selection */ });
menu.addSeparatorLine();
menu.attach(*target);
API
attach installs an event filter. popupAt opens the menu at a global position and detach removes the filter.
Variations
Use the inherited item, check item, radio item, label and submenu helpers.
Keyboard and accessibility
Qt supplies native focus, keyboard interaction and accessible object roles. Give the component a visible label or an accessible name when its text alone does not explain the action.
Ownership
The parent widget owns the component. Child widgets created through a component layout follow Qt parent ownership. References returned by helper methods are borrowed.