запрет нажатия QPushButton дважды Qt / C++

232
21 февраля 2018, 11:00

создаю калькулятор и надо запретить нажатие QPushButton кнопки дважды по очереди например ++ // или например запретить кнопку = нажимать дважды

Answer 1

Можно перехватывать нажатие QPushButton и сравнивать с последней нажатой кнопкой

#include <QMainWindow>
#include <QPushButton>
#include <QVBoxLayout>
#include <QLineEdit>
enum LastButton {
    BUTTON_DEFAULT,
    BUTTON_A,
    BUTTON_B,
    BUTTON_C,
};
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0)
        : QMainWindow(parent),
          _lastButton(BUTTON_DEFAULT)
    {
        _lineEditOut = new QLineEdit;
        _buttonA = new QPushButton("A");
        _buttonB = new QPushButton("B");
        _buttonC = new QPushButton("C");
        connect(_buttonA, &QPushButton::clicked, this, &MainWindow::onButtonA);
        connect(_buttonB, &QPushButton::clicked, this, &MainWindow::onButtonB);
        connect(_buttonC, &QPushButton::clicked, this, &MainWindow::onButtonC);
        connect(this, &MainWindow::buttonPressed, this, &MainWindow::onButtonPressed);

        QVBoxLayout *mainLayout = new QVBoxLayout;
        mainLayout->addWidget(_lineEditOut);
        mainLayout->addWidget(_buttonA);
        mainLayout->addWidget(_buttonB);
        mainLayout->addWidget(_buttonC);
        QWidget *widget = new QWidget;
        widget->setLayout(mainLayout);
        this->setCentralWidget(widget);
    }
signals:
    void buttonPressed(QString);
private slots:
    void onButtonA()
    {
        if(_lastButton == LastButton::BUTTON_A) {
            // если уже нажимали такую кнопку, то ничего не делаем
            return;
        }
        emit buttonPressed("A");
        _lastButton = LastButton::BUTTON_A;
    }
    void onButtonB()
    {
        if(_lastButton == LastButton::BUTTON_B) {
            // если уже нажимали такую кнопку, то ничего не делаем
            return;
        }
        emit buttonPressed("B");
        _lastButton = LastButton::BUTTON_B;
    }
    void onButtonC()
    {
        if(_lastButton == LastButton::BUTTON_C) {
            // если уже нажимали такую кнопку, то ничего не делаем
            return;
        }
        emit buttonPressed("C");
        _lastButton = LastButton::BUTTON_C;
    }
    void onButtonPressed(QString text) {
        _lineEditOut->setText(_lineEditOut->text() + text);
    }


private:
    QPushButton* _buttonA;
    QPushButton* _buttonB;
    QPushButton* _buttonC;
    QLineEdit*   _lineEditOut;
    LastButton _lastButton;

};
READ ALSO
Не могу перегрузить оператор &ldquo;&lt;&rdquo; для класса

Не могу перегрузить оператор “<” для класса

Необходимости засовывать оператор в класс не былоНаоборот, правильнее перегружать такой оператор отдельной функцией

305
Qt и QML. Как заполнить GridView информацией с БД

Qt и QML. Как заполнить GridView информацией с БД

У меня есть проблема, я реализовал вывод данных с БД в С++ в qml почти как в этом видео https://wwwyoutube

224
замена знака минус на тильду в QString c++ qt

замена знака минус на тильду в QString c++ qt

есть выражение например -5+(-12)-25 надо заменить все минус симвилы отрицательных чисел на знак ~ результат ~5+(~12)-25 помогите заменить

194
структура в очереди

структура в очереди

Есть очередь, есть структураСтруктура помещается в очередь

200