Как объединить QLineEdit с QPushButton без пробелов между ними? - PullRequest
0 голосов
/ 09 января 2020

Мне нужно сделать такой элемент:

enter image description here

Это комбинация редактирования строки и кнопки с такой же высоты и между ними нет пробелов .

Я пробовал в Qt Designer, но высота их не одинакова, и между этими двумя элементами всегда есть небольшое пространство.

enter image description here Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 09 января 2020

Может быть, вы могли бы настроить 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 защищенный метод (вызывается, когда пользователь нажимает кнопку).

Просто идея.

...