访问槽外的变量。在插槽之间传递变量。在QT中连接字符串变量

access variables outside of slot. pass variables between slots. concatenate string variables in QT

Qt 新手。你能帮我理解如何连接来自两个不同行编辑的两个 QString 吗?

我有一个带有两行编辑的图形用户界面。前缀文本和数字文本。我想将前缀和数字值组合成一个字符串。

//connect the line edit slots to signals
    QObject::connect(ui->prefixLineEdit, SIGNAL(textChanged(QString)),
                             this, SLOT(prefixChanged()));
    QObject::connect(ui->startNumberLineEdit, SIGNAL(textChanged(QString)),
                             this, SLOT(startNumChanged()));

//functions to run when line edit is changed
void MainWindow::prefixChanged(){
    QString prefixText = ui->prefixLineEdit->text();

}
void MainWindow::startNumChanged(){
    QString startNumberText = ui->startNumberLineEdit->text();

    //combine prefix and start number??
    QString combined = (prefixText + startNumberText);
    ui->statusbar->showMessage(combined);

}

我想一般的问题是如何在槽之间共享变量?我已经阅读了有关 QSignalMapper 的信息,可能会制作一个代理槽来传递参数,并查看了 QString 的 .args() 函数。但这一切现在都超出了我的范围。

我是否必须将这些变量设置为 public 才能从槽函数中访问它们?我认为这有点不受欢迎?

如有任何建议,我们将不胜感激。

您可以这样做,只需在您需要的地方访问 ui

void MainWindow::startNumChanged(){
    QString startNumberText = ui->startNumberLineEdit->text();
    QString prefixText = ui->prefixLineEdit->text();

    //combine prefix and start number
    QString combined = prefixText + startNumberText;
    ui->statusbar->showMessage(combined);
}

您可以将此代码移动到某个函数中,并在需要时从每个槽中调用它。

在更复杂的情况下,您需要 header 中 class 的私有变量:

QString startNumberText;
QString prefixText;

(代表OP发表).

根据demonplus的回答,我制作了这个函数:

void MainWindow::combineOutputName(){

    QString prefixText = ui->prefixLineEdit->text();
    int incrementValue = ui->incrementSpinBox->value();
    QString startNumberValue = ui->startNumberLineEdit->text();

    int newValue = startNumberValue.toInt() + incrementValue;

    ui->exampleLabel->setText(QString::number(newValue));
}

这完成了将来自不同 UI 元素的输入集中到一个变量中。