0

私は次の状況にあります:

ここに画像の説明を入力してください

  • [UIの読み込み]ボタンは、中央のウィジェットレイアウトの一部です。
  • 中央ウィジェットには、[UIのロード]ボタンの右側にQWidgetがあります。そのウィジェットのメインレイアウトには、さらに2つの空のレイアウトlay1とlay2があります
  • [Uiのロード]をクリックすると、QLable(ここに印刷)とQPushButton(ラインエディターのロード)を持つUiフォームが、動的UIローダーを介して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
}
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

mainwindow のメンバーとして編集を行い、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

于 2013-03-20T06:46:18.103 に答える