Qt C ++ GUI QSpinBox存储输入?

时间:2014-01-19 00:33:46

标签: c++ qt

如何从旋转框中获取用户输入并将其用作值?换句话说,如果我想将QSpinBox的输入存储到变量中,我将如何进行此操作。我是Qt GUI的新手,所以任何输入都会非常感激。

1 个答案:

答案 0 :(得分:1)

要对Qt中的GUI元素作出反应,您可以连接这些元素发出的信号。此外,如果您有指向它实例的指针,则可以查询并更改其状态和属性。

以下是您正在寻找的内容的快速示例

#include <QApplication>
#include <QVBoxLayout>
#include <QLabel>
#include <QSpinBox>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // The widget, contains a layout
    QWidget * w;
    w = new QWidget;

    // The layout arranges and holds
    // all the children of the widget
    QVBoxLayout * vbox;

    vbox = new QVBoxLayout;

    // The user input element, the spinbox!
    QSpinBox * spinbox;

    spinbox = new QSpinBox();
    spinbox->setValue(5);// example of using a pointer to edit its states

    // now add it to the layout
    vbox->addWidget(spinbox);

    // add in an element to connect to,
    // the infamous QLabel
    QLabel * label;

    label = new QLabel("spinbox output");

    // add it also to the layout
    vbox->addWidget(label);

    // connection can happen anytime as long as the two elements
    // are not null!

    // This connection takes advantage of signals and slots
    // and making their connection at runtime.

    // if a connect call fails you should be able to see why in the
    // application output.
    QObject::connect(spinbox, SIGNAL(valueChanged(QString)),
        label, SLOT(setText(QString)));

    // associate the layout to the widget
    w->setLayout(vbox);

    // make the widget appear!
    w->show();

    return a.exec();
}

我通常将GUI元素的大部分初始化和连接放入构造函数或主QWidgetQMainWindow的方法中。我经常从GUI输入元素中获取信号,比如一个旋转框,我将它连接到我的子类QWidget上定义的自定义插槽。然后,如果我想用不同的输入值显示它或者将输出增加2,我可以很容易地做到这一点。

// in the constructor of my Widget class
// after spinbox has been initialized
QObject(m_spinbox, SIGNAL(valueChanged(int)),
    this, SLOT(on_spinboxValueChanged(int)));

void Widget::on_spinboxValueChanged(int i)
{
    // here m_label is a member variable of the Widget class
    m_label->setText(QString::number(i + 2)); 

    // if accessing the value in this function is inconvenient, you can always 
    // use a member variable pointer to it to get its stored value.
    // for example:
    int j = m_spinbox->value();
    qDebug() << "Spinbox value" << j;
}

在QML和Qt Quick中可以完成相同的事情,对于很多人来说,它更容易,更直观,因为它与javascript和css有多接近。

此外,Qt Creator还有一个生成表单的工具,它提供了另一种使用布局创建窗口小部件的方法,然后当您访问元素时,可以通过ui变量来完成。

此外,Qt文档和示例非常棒。花时间学习它们并阅读它们是非常值得的。

希望有所帮助。