2016-11-09 20 views
1

Qt的新功能。你能幫我理解如何連接來自兩個不同行編輯的兩個QString嗎?訪問槽外的變量。傳遞時隙之間的變量。在QT中連接字符串變量

我有一個兩行編輯gui。一個前綴文本和一個數字文本。我想將前綴和數字值合併爲一個字符串。

//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()函數。但現在這種情況超出了我的視野。

我是否必須公開這些變量才能將它們從插槽函數中取出?我以爲這是有點皺眉?

任何意見將不勝感激。

+0

您可以擁有私有成員變量,但在您的情況下,您可以使用'ui'變量:'ui-> prefixLineEdit-> text()'從任何'MainWindow'成員函數訪問文本。 – thuga

回答

3

你可以做這樣的,只是訪問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); 
} 

您可以將此代碼移到一些功能,如果你需要從每個插槽調用它。

在更復雜的情況下,就需要在頭類的私有變量:

QString startNumberText; 
QString prefixText; 
0

(發佈代表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元素的輸入拉在一起成爲一個變量。