【问题标题】:Changing the value of a dial slide with an input in QT?在 QT 中使用输入更改拨号滑动的值?
【发布时间】:2016-11-15 06:34:05
【问题描述】:

好吧,我有点卡在这个问题上 - 我正在尝试更改拨号滑块的值,我想使用带有 QLineEdit 输入字段的输入来更改它,但到目前为止我找不到任何可能有的东西帮助我上网。

代码片段

void MainWindow::on_lineEditGain_textChanged(const QString &arg1)
{
    QString getVal=ui->lineEditGain->text();
    // qint16 intVal = getVal.split(" ")[0].toInt();
    connect(getVal, SIGNAL(textChanged(QString)), this, SLOT(setValue(QString)));
}

【问题讨论】:

  • 我知道您想从 lineedit 更改滑块,您输入一个数字,它应该会更新滑块
  • 此外,我想提一下,我的表盘有一个最大值和最小值(-127 和 127),我在几个地方读到某些约束和 GUI 元素不能很好地协同工作像这样。
  • 我建议用 QSpinBox 替换 QLineEdit
  • QSpinBox 并不是我想要的,我最大的问题是“接线”这两个,因为我不知道如何用一个更动态的输入来更改表盘上的选定值。
  • 请检查我的解决方案

标签: c++ qt qt5 qlineedit qslider


【解决方案1】:

创建槽:

private slots:    
    void MySlot(QString text);

在构造函数中将textChanged()MySlot() 连接起来:

connect(lineedit, &QLineEdit::textChanged, this, &YourWidget::MySlot);

然后

void YourWidget::MySlot(QString text)
{
    QRegExp re("\\d*");  // a digit (\d), zero or more times (*)
    if (re.exactMatch(text)){
        int value = text.toInt();
        if(value >= -127 && value<=127)
          slider->setValue(value);
    }
}

你也可以放置一个 QValidator

lineedit->setValidator( new QIntValidator(-127, 127, this) );

在你的情况下:

void MainWindow::on_lineEditGain_textChanged(const QString &arg1)
{
    QRegExp re("\\d*");  // a digit (\d), zero or more times (*)
    if (re.exactMatch(arg1)){
        int value = arg1.toInt();
        if(value >= -127 && value<=127)
            ui->slider->setValue(value);
    }
}

【讨论】:

  • 试图将它与我的代码相匹配,但是我得到了这个:“D:\Qt Projects\OXforce\mainwindow.cpp:117: error: C2664: 'QMetaObject::Connection QObject::connect( const QObject *,const char *,const char *,Qt::ConnectionType) const' : 无法将参数 1 从 'QString' 转换为 'const QObject *' 没有可以执行此转换的用户定义转换运算符,或者无法调用运算符”
  • 在问题中添加了一个 sn-p。 :)
  • 太棒了,虽然为了做这么简单的事情看起来很麻烦......不过,非常感谢!我真的很感激!
  • 介意你能给我一些关于如何使它也适用于负整数的建议吗?
  • 我就是这么做的!再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 2020-09-06
  • 1970-01-01
相关资源
最近更新 更多