如何在Qcreator中的QLabel中显示多个值

时间:2015-07-24 14:59:18

标签: qt qlabel

我正在使用Qt SDK开发计算器我想从计算器按钮获取值到一个Qlabel。我使用设计视图设计了GUI,我尝试使用以下代码获取值。

void MainWindow::on_three_button_clicked(){
    ui->label->setText("3");
} 

但是那时我只能获得一个按钮值

请帮助我...

2 个答案:

答案 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使此事实明确,并根据计算器的状态调整计算器的行为。