Может быть, вы могли бы настроить QComboBox
, что-то вроде этого:
#include <QComboBox>
#include <QLineEdit>
class CustomBox : public QComboBox
{
Q_OBJECT
public:
CustomBox(QWidget * parent = nullptr) : QComboBox(parent)
{
setEditable(true);
QString ss =
"QComboBox::drop-down {border: none;}"
"QComboBox::down-arrow { image: url(/data/whatever.png); }"
"QComboBox::down-arrow:pressed { image: url(/data/whatever-pressed.png); }";
setStyleSheet(ss);
connect(lineEdit(), &QLineEdit::editingFinished, [this](){
QString t = lineEdit()->text();
clear();
lineEdit()->setText(t);
});
}
void setText(const QString & t) { lineEdit()->setText(t); }
QString text() const { return lineEdit()->text(); }
protected:
void showPopup() override
{
emit buttonClicked();
}
signals:
void buttonClicked();
};
Поле со списком установлено как редактируемое, поэтому вы можете использовать базовый QLineEdit
, который, более или менее, под полным контролем через защищенный lineEdit()' member function. As you can see, I connected its
editFinished () `сигнал лямбде, чтобы избежать добавления элементов в комбо каждый раз (это происходит, когда пользователь нажимает Enter в редактируемом поле со списком).
Стиль довольно просто, учитывая, что у вас есть пара значков для кнопки.
Я выставил строку edit text
getter / setter и добавил сигнал для нажатия кнопки, который излучается из showPopup
защищенный метод (вызывается, когда пользователь нажимает кнопку).
Просто идея.