Освоение Qt, неработающий пример. [Решено]

Изображение пользователя Susumo.

Решил тут немного мозги напреч, взялся за освоение Qt (Qt Creator), приобрел книгу и .... Ни образования, ни опыта работы в этой области не имею.

В общем написал по примеру из книги калькулятор, а он считать не хочет, у кого есть время посмотрите, чего я пропустил или это заведомо не рабочее, в книге это находится в главе про интерфейс и про вычисления не говорится (ну кроме кода от сюда).

з.ы. В примерах Qt Creator'а другой калькулятор, по сложней, в его коде пока мне трудно разобраться.

0
mft - 17 Апрель, 2012 - 10:21

Хотя это из Шлее. Вместе с книгой идёт диск с этими примерами.

0
Susumo - 17 Апрель, 2012 - 10:25
Изображение пользователя Susumo.

Эта. У нас она без диска и значительно дешевле, да и если самому писать, код лучше запоминается и потом легче его описание понимается.

0
Master_Yoda - 17 Апрель, 2012 - 10:31

Я в таких случаях пошагово дебажить начинаю. Ставьте бряк где-нибудь вот здесь:
QString str = ((QPushButton*)sender())->text();
и понеслась.

0
itrch - 17 Апрель, 2012 - 10:50
Изображение пользователя itrch.

что значит не хочет считать? в чем это проявляется?
хотя конечно, проще самому отдебажить. если знаешь как )))

0
Susumo - 17 Апрель, 2012 - 11:18
Изображение пользователя Susumo.

что значит не хочет считать? в чем это проявляется?
/*-+= сбрасывают на 0.

0
itrch - 17 Апрель, 2012 - 11:36
Изображение пользователя itrch.

ну так вводите следующее число и жмите равно. все должно работать, кмк.

0
Susumo - 17 Апрель, 2012 - 11:41
Изображение пользователя Susumo.

Думаете я не пробовал))) После "=" в любом случае 0 (почти в любом) При делении другой немного баг, скажем 123/123 дает на экран 123123 после "=" получаем "F", при остальных операциях 0.

+2
itrch - 17 Апрель, 2012 - 12:15
Изображение пользователя itrch.

значит так. не работает, потому что не заносится операция в стэк.
в файле calculator.cpp последний else надо переписать следующим образом:
было
...
else {
            m_stk.push (QString ().setNum (m_plcd -> value()));
            m_strDisplay = "";
            m_plcd -> display ("0");
        }

надо
        else {
m_stk.push(QString("%0").arg(m_plcd->value()));
m_stk.push(str);
        m_strDisplay = "";
        }

0
Susumo - 17 Апрель, 2012 - 12:58
Изображение пользователя Susumo.

Заработало! В книге ошибка, перепроверил, там так у меня было. При тесте заметил, что 10/5=0.2
было:
    double dOperand1 = m_stk.pop().toDouble();
    QString strOperation = m_stk.pop();
    double dOperand2 = m_stk.pop().toDouble();
    double dResult = 0;

сделал     double dOperand2 = m_stk.pop().toDouble();
    QString strOperation = m_stk.pop();
    double dOperand1 = m_stk.pop().toDouble();
    double dResult = 0;

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры