CalculatorWidget::CalculatorWidget(QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags) { QGridLayout *layout = new QGridLayout(this); layout->setSizeConstraint(QLayout::SetFixedSize); setLayout(layout); QSizePolicy policy = sizePolicy(); displayLabel = new QLabel(this); layout->addWidget(displayLabel, 0, 0, 1, 3); displayLabel->setAutoFillBackground(true); displayLabel->setBackgroundRole(QPalette::Base); displayLabel->setAlignment(Qt::AlignRight); displayLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); policy = displayLabel->sizePolicy(); policy.setVerticalPolicy(QSizePolicy::Fixed); displayLabel->setSizePolicy(policy); signalMapper = new QSignalMapper(this); QPushButton *button = new QPushButton(QString::number(0), this); QObject::connect(button, SIGNAL(clicked()), signalMapper, SLOT(map())); signalMapper->setMapping(button, 0); layout->addWidget(button, 4, 1); digitButtons.push_back(button); for (unsigned int i = 1; i < 10; ++i) { QPushButton *button = new QPushButton(QString::number(i), this); QObject::connect(button, SIGNAL(clicked()), signalMapper, SLOT(map())); signalMapper->setMapping(button, i); layout->addWidget(button, 1+(9-i)/3, (i-1)%3); digitButtons.push_back(button); } QObject::connect(signalMapper, SIGNAL(mapped(int)), SLOT(buttonClicked(int))); clearButton = new QPushButton("C", this); layout->addWidget(clearButton, 1, 4); QObject::connect(clearButton, SIGNAL(clicked()), SLOT(clearButtonClicked())); additionButton = new QPushButton("+", this); layout->addWidget(additionButton, 2, 4); QObject::connect(additionButton, SIGNAL(clicked()), SLOT(addButtonClicked())); subtractionButton = new QPushButton("-", this); layout->addWidget(subtractionButton, 3, 4); QObject::connect(subtractionButton, SIGNAL(clicked()), SLOT(subtractButtonClicked())); calculateButton = new QPushButton("=", this); layout->addWidget(calculateButton, 4, 4); QObject::connect(calculateButton, SIGNAL(clicked()), SLOT(calculateButtonClicked())); }
void Program::init() { window = new MainWindow(0x0); connect( window, SIGNAL(calculateButtonClicked()), this, SLOT(processCalculating()) ); connect( window, SIGNAL(drawButtonClicked()), this, SLOT(processLineDraw()) ); }