在QStackedWidget页面之间共享变量

问题描述:

我有3页的StackedWidget,每页都包含3个lineEdit,现在在我每次通过的页面上,我都想将这3个lineEdit的内容保存到一个变量中,以便稍后处理它。 我有这样一段代码:在QStackedWidget页面之间共享变量

connect(ui->stackedWidget, SIGNAL(currentChanged(int)), this, SLOT(getInputs(int))); 

和插槽:

void ConfSetup::getInputs(int index) 
{ 
    QString para; 

    switch(index) 
    { 
     case 1: 
      ui->backButton0->setEnabled(false); 
     break; 

     case 2: 
      inputs << ui->serverEdit->text(); 
      inputs << ui->portEdit->text(); 
     break; 

     case 3: 
      inputs << ui->userDbEdit->text(); 
      inputs << ui->passwordDbEdit->text(); 
     break; 

     case 6: 
      foreach(para, inputs) 
       ui->comboBox->addItem(para); 
      //ui->lineEdit->setText(QString::number(para.length())); 
     break; 

     default: 
      ui->backButton0->setEnabled(true); 
     break; 
    } 
} 

comboBox插件现在应该包含4个值,而是那么它包含一个空白文本,也para.length()lineEdit返回0小部件。

一个朋友告诉我,我尽显inputs变量的时候,我改变了索引页,巫婆当然意味着lineEdit构件是在那个时候是空的。该解决方案很简单,第一,我避免getInputs(int)插槽,替换我有这样的:

ui->comboBox->addItem(ui->serverEdit->text()); 
ui->comboBox->addItem(ui->portEdit->text()); 
ui->comboBox->addItem(ui->userDbEdit->text()); 
// ... etc 

为什么不在你的主窗口中使用成员变量?只需在头文件中声明它们并在你的cpp中初始化即可。

// your header file 
QString m_server_str; 
QString m_port_str; 
QString m_userdb_str; 
QString m_passworddb_str; 

和交换你的QStackedWidget的页面,当你阅读的编辑的内容,并将它们保存到您的成员变量。只要使用他们相同的信号,你已经这样做了:QStackedWidget::currentChanged (int index)

+0

你能解释一下错误的'QStringList中inputs',因为对我来说看起来有些设置许多成员。我刚刚尝试了你的建议,并得到了一些结果(空白文本)。 – SIFE 2011-05-09 12:49:01

+0

请记住* index *是您更改为新页面的编号。也许你拿错了页面,需要先存储当前页面的索引。 – Exa 2011-05-09 18:23:23

+0

我确定我没有选错页面。 – SIFE 2011-05-09 23:47:34