我正在使用Qt SDK开发计算器我想从计算器按钮获取值到一个Qlabel。我使用设计视图设计了GUI,我尝试使用以下代码获取值。
void MainWindow::on_three_button_clicked(){
ui->label->setText("3");
}
但是那时我只能获得一个按钮值
请帮助我...
答案 0 :(得分:0)
您可以使用一个QString
变量来存储当前按下的值。在这里,我正在考虑将您的类变量定义为QString myEnteredNum
。然后你可以使用它如下面的代码:
void MainWindow::on_three_button_clicked(){
myEnteredNum.append("3"); // This method you can add in each number slot
ui->label->setText(myEnteredNum);
}
我希望这会对你有所帮助。
答案 1 :(得分:0)
这有两种一般方法。您可以将数字直接附加到数字,并将标签绑定到数字。下面的m_first
标签会以这种方式更新。您还可以将数字直接附加到标签上。 m_second
标签已更新。
#include <QtWidgets>
class Window : public QWidget {
Q_OBJECT
Q_PROPERTY(double number MEMBER m_number WRITE setNumber NOTIFY numberChanged)
double m_number;
QGridLayout m_grid;
QLabel m_first, m_second;
QPushButton m_digits[10], m_clear;
public:
Window(QWidget * parent = 0) : QWidget(parent),
m_grid(this), m_clear("C") {
m_grid.addWidget(&m_first, 0, 0, 1, 3);
m_grid.addWidget(&m_second, 1, 0, 1, 3);
m_grid.addWidget(&m_clear, 5, 2);
for (int i = 0; i < 9; ++i) {
m_digits[i].setText(QString::number(i));
if (i > 0) m_grid.addWidget(m_digits + i, 2 + (i-1)/3, (i-1)%3);
else m_grid.addWidget(m_digits + i, 5, 1);
QObject::connect(m_digits + i, &QPushButton::clicked, [i, this]{
// Add the digit to the number
setNumber(m_number * 10.0 + i);
// Add the digit to the label
m_second.setText(m_second.text().append(QString::number(i)));
});
}
QObject::connect(&m_clear, &QPushButton::clicked, [this]{
setNumber(0);
m_second.setText("0");
});
QObject::connect(this, &Window::numberChanged,
&m_second, &QLabel::setNum);
emit m_clear.clicked(); // initialize everything
}
Q_SIGNAL void numberChanged(double);
void setNumber(double n) { m_number = n; emit numberChanged(n); }
};
int main(int argc, char ** argv) {
QApplication app(argc, argv);
Window window;
window.show();
return app.exec();
}
#include "main.moc"
最后,计算器是有状态的,为避免常见错误,您可以使用QStateMachine
使此事实明确,并根据计算器的状态调整计算器的行为。