2013-03-20 44 views
0

加載我有以下情況:如何設置文本的UI標籤是由QUiLoader

enter image description here

  • 加載UI按鈕是中央窗口部件佈局的一部分。
  • 中央小部件在Load Ui按鈕右側有一個QWidget。該小部件的主佈局 有兩個更多的空佈局lay1和lay2
  • 點擊Load Ui Ui窗體,通過動態ui加載程序將QLable(此處打印)和QPushButton(載入線路編輯器)加載到lay1。
  • 在點擊載重線編輯器將添加QLineEdit的到lay2

現在我要帶線編輯的文本,並將其打印到QLabel(「打印這裏」)

我無言以對怎麼辦而不用做任何中間變量。

以下是主窗口類定義的一部分:

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    lay1 = new QHBoxLayout; 
    lay2 = new QHBoxLayout; 
    laymain = new QVBoxLayout; 
    laymain->addLayout(lay1); 
    laymain->addLayout(lay2); 
    ui->widget->setLayout(laymain); 
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(LoadEdit())); 
} 

void MainWindow::LoadEdit() 
{ 
if(lay1->isEmpty()) 
    { 

     QUiLoader load; 
     QFile file("E:\\WorkFolder\\Qt\\ValueOfFilter\\PrintValue.ui"); 
      file.open(QIODevice::ReadOnly); 
     QWidget * edit = load.load(&file,this); 

     lay1->addWidget(edit,Qt::Horizontal); 

     edit->addAction(act); 
     QPushButton * textbutton = edit->findChild<QPushButton*>("pushButton"); 
     connect(textbutton,SIGNAL(clicked()),this,SLOT(LoadEditClicked())); 

} 

void MainWindow::LoadEditClicked() 
{ 
    if(lay2->isEmpty()) 
    { 
     QLineEdit * lineedit = new QLineEdit; 

     lay2->addWidget(lineedit); 
    } 
     //want to take text from lineedit and print it to label 
} 

回答

1

問題就解決了,再變LoadEditClicked爲:

void MainWindow::LoadEditClicked() 
{ 
    if(lay2->isEmpty()) 
     { 
      QLineEdit * lineedit = new QLineEdit; 

      lay2->addWidget(lineedit); 


     QLabel * label = edit->findChild<QLabel*>("label"); 

     connect(lineedit,SIGNAL(textChanged(QString)),label,SLOT(setText(QString))); 
    } 
} 

感謝@lwinhtooko發表評論

0

有發出的信號每當lineedit內的文本被改變

textChanged(const QString & text) 

此連接的QLabel

settext()
connect(lineedit , SIGNAL(textChanged(QString)),label, SLOT(setText(QString))); 
+0

lineedit和標籤是當地兩個插槽見定義插槽LoadEdit()和LoadEditClicked() – 2013-03-20 05:17:06

2

這是你想要的嗎?當我做編輯的主窗口的成員

void MainWindow::LoadEditClicked() 
{ 
    if(lay2->isEmpty()) 
    { 
     QLineEdit * lineedit = new QLineEdit; 

     lay2->addWidget(lineedit); 
    } 
    QLabel * label = edit->findChild<QLabel*>("label"); 
    label->setText(lineedit->text()); 
} 
+0

因爲我已經動態加載Ui,然後訪問QLabel我必須寫:QLabel * label = edit-> findChild (「label」);當我這樣做時,它將在該插槽本地,所以我不能在另一個插槽訪問它。 – 2013-03-20 05:56:51

+0

你是在哪裏創建QLabel的?如果QLabel未創建,但是當您單擊textButton時,首先創建QLabel,然後將LineEdit中的文本設置爲它。 – 2013-03-20 06:02:02

+0

它是Ui形式的一部分,我使用QUiLoader動態加載並將其設置爲lay1,並且必須通過在另一個插槽中創建的lineedit設置它的文本並將其添加到lay2 – 2013-03-20 06:04:33