Native Select
A styled QComboBox that keeps the native option model and keyboard handling.
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;
const QString name = "native-select";
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();
NativeSelect* select = name == "combobox" ? static_cast<NativeSelect*>(new Combobox(host))
: name == "select" ? static_cast<NativeSelect*>(new Select(host))
: new NativeSelect(host);
select->setFixedWidth(240);
select->addItems({"Apple", "Banana", "Blueberry", "Grapes", "Pineapple"});
select->setCurrentIndex(-1);
select->setPlaceholderText("Select a fruit");
select->setAccessibleName("Fruit");
if (auto* combo = qobject_cast<Combobox*>(select))
combo->setPlaceholderText("Search fruit...");
layout->addWidget(select);
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/data.hpp>
shadcn::NativeSelect select(parent);
select.addItems({"Small", "Medium", "Large"});
select.setCurrentIndex(1);
select.setInvalid(true);
API
NativeSelect inherits QComboBox. setInvalid controls the error palette and isInvalid reads it.
Variations
Use Select for grouped options or Combobox for searchable completion.
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.