0

我有以下情况:

在此处输入图像描述

  • 加载 Ui 按钮是中央小部件布局的一部分。
  • 中央小部件在 Load Ui 按钮的右侧有一个 QWidget。该小部件的主布局还有两个空布局lay1和lay2
  • 单击加载 Ui 时,通过动态 ui 加载器将具有 QLable(在此处打​​印)和 QPushButton(加载行编辑器)的 Ui 表单加载到lay1。
  • 单击加载线编辑器会将 QLineEdit 添加到lay2

现在我想获取行编辑文本并将其打印到 QLabel("Print here")

我不知道如何在不产生任何中间变量的情况下做到这一点。

以下是主窗口类定义的一部分:

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
}
4

3 回答 3

2

这是你想要的吗?

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

        lay2->addWidget(lineedit);
   }
   QLabel * label = edit->findChild<QLabel*>("label");
   label->setText(lineedit->text());
}
于 2013-03-20T05:53:01.583 回答
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)));
    }
 }

感谢@lwinhtoko 发表评论

于 2013-03-20T06:46:18.103 回答
0

每当 lineedit 中的文本发生更改时,都会发出一个信号

textChanged( const QString & text ) 

将此连接到的settext()插槽QLabel

connect(lineedit , SIGNAL(textChanged(QString)),label, SLOT(setText(QString )));
于 2013-03-20T05:10:49.483 回答