Russian Qt Forum

Qt => Общие вопросы => Тема начата: reD_Rus от Ноябрь 23, 2009, 13:22



Название: 10 сигналов и 1 слот
Отправлено: reD_Rus от Ноябрь 23, 2009, 13:22
Хочу написать калькулятор (для тренировки) на qt 4.5.2 в Qt Creator 1.2.1
Накидал кнопок b1,b2и т. д. В слоте каждой кнопки читаю её поле text() и отдаю строкой переменной qsDigits потом вывожу на lcdNumber
есть ли способ сделать один слот на все 10 кнопок, и в нем читать поле text() кликнутой кнопки?

Вот так я делаю сейчас:

Код:
void Calc::on_b1_clicked()
{
if (qsDigits->length() <= 10) {
qsDigits->append(ui->b1->text());
ui->lcdNumber->display(*qsDigits);
}
}
void Calc::on_b2_clicked()
{
if (qsDigits->length() <= 10) {
qsDigits->append(ui->b2->text());
ui->lcdNumber->display(*qsDigits);
}
}


Название: Re: 10 сигналов и 1 слот
Отправлено: Zmeishe от Ноябрь 23, 2009, 13:24
сделай.
В чём проблема то?

Функция sender() вернёт указатель типа QObject на нажатую кнопку.
Приводи его к типу твоих кнопок и юзай как хошь.


Название: Re: 10 сигналов и 1 слот
Отправлено: reD_Rus от Ноябрь 23, 2009, 13:25
а как читать? это поле
если нетрудно пример


Название: Re: 10 сигналов и 1 слот
Отправлено: Zmeishe от Ноябрь 23, 2009, 13:29
QPushButton *btn = qobject_cast<QPushButton*>( sender() );


Название: Re: 10 сигналов и 1 слот
Отправлено: kuzulis от Ноябрь 23, 2009, 13:33
см \examples\widgets\calculator\calculator.cpp
Код:
void Calculator::digitClicked()
{
    Button *clickedButton = qobject_cast<Button *>(sender());
    int digitValue = clickedButton->text().toInt();
    if (display->text() == "0" && digitValue == 0.0)
        return;

    if (waitingForOperand) {
        display->clear();
waitingForOperand = false;
    }
    display->setText(display->text() + QString::number(digitValue));
}


Название: Re: 10 сигналов и 1 слот
Отправлено: reD_Rus от Ноябрь 23, 2009, 13:34
Спасибо! все получилось


Название: Re: 10 сигналов и 1 слот
Отправлено: SASA от Ноябрь 23, 2009, 13:35
QSignalMapper +
http://qt.osdn.org.ua/signalmapper.html (http://qt.osdn.org.ua/signalmapper.html)