Qt访问动态qLineEdit

问题描述 投票:0回答:1

我正在编程配置器。如果单击Addbutton,它会动态添加几个标签和LineEdits(请参阅下面的代码)。

我的问题如下:

在我创建Labels和LineEdits后,它们将被显示,但如果用户更改了LineEdits的值,我该如何访问该数据?更重要的是我如何知道它是哪个(第一,第二,第三)LineEdits或Label?

在以下代码中,值不会保存在列表中,但我将按以下步骤添加。我希望你能得到我的问题。关注我的代码应该在"onAbstandSent"那里我创建我的LineEdit,我需要稍后访问。重要的是,正如我所提到的,我必须知道用户改变了哪个LineEdit

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    counter=0;

    ui->setupUi(this);

    //Verteiler links

}
MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

//SLOT zum Daten bekommen
void MainWindow::onDNSent (const QString & DN)
{
    DNhelp=DN;
    qDebug()<<(DNhelp);

    //showing DN label
    QLabel *DNlabel = new QLabel ();

  //  DNlabel->sets
    DNlabel->setParent(this);
    DNlabel->show();
    DNlabel->setText(DNhelp);
    //counter muss hier 1 sein, weil der add button schon durchgelaufen ist und deshalb beim ersten durchlauf counter hier! schon 1 ist
    if  (counter==1)
    {
       DNlabel->setGeometry(xposition+80,507,40,40);
    }
    else
    {
       DNlabel->setGeometry(xposition+45,507,40,40);
    }
}

void MainWindow::onPNSent (const QString & PN)
{
    PNhelp=PN;
    qDebug()<<(PNhelp);

    //showing PN label
    QLabel *PNlabel = new QLabel ();

  //  DNlabel->sets
    PNlabel->setParent(this);
    PNlabel->show();
    PNlabel->setText(PNhelp);
    //counter muss hier 1 sein, weil der add button schon durchgelaufen ist und deshalb beim ersten durchlauf counter hier! schon 1 ist
    if  (counter==1)
    {
       PNlabel->setGeometry(xposition+80,530,40,40);
    }
    else
    {
       PNlabel->setGeometry(xposition+45,530,40,40);
    }
}


void MainWindow::onAbstandSent (const double & mm)
{
    Abstand=mm;
    qDebug()<<(Abstand);
    //showing Abstand LineEdit
    QLineEdit *Abstandlineedit = new QLineEdit ();
    //can this help?
    ui->gridLayout->addWidget(Abstandlineedit,counter-1,0);
    Abstandlineedit->setParent(this);
    Abstandlineedit->show();
    Abstandlineedit->setText(QString::number(Abstand));
    //lineedit Hintergrund transparent machen
    Abstandlineedit->setStyleSheet("background:transparent;");
    //counter muss hier 1 sein, weil der add button schon durchgelaufen ist und deshalb beim ersten durchlauf counter hier! schon 1 ist
    if  (counter==1)
    {
      Abstandlineedit->setGeometry(xposition+80,230,40,40);
    }
    else
    {
       Abstandlineedit->setGeometry(xposition+15,568,30,20);
    }

}
void MainWindow::on_pushButton_add_clicked()
{

    //label Verteiler Picture

    QPixmap vert_links("C:/Users/Boushar/Desktop/Bachelor_Fred/Coden/Verteiler_links");
    QPixmap vert_mitte("C:/Users/Boushar/Desktop/Bachelor_Fred/Coden/Verteiler_mitte");
    QPixmap vert_rechts("C:/Users/Boushar/Desktop/Bachelor_Fred/Coden/Verteiler_rechts");
    QLabel *label = new QLabel ();
    //add Label to the List


    xposition=counter*60;

    if  (counter==0)
    {
        label->setPixmap(vert_links);
    }
    else
    {
        xposition=xposition+35;
        label->setPixmap(vert_rechts);
    }
    if (counter>1)
    {
     qlist.last()->setPixmap(vert_mitte);

    }
    qlist.append(label);
    label->setParent(this);
    label->setGeometry((xposition),500,125,172);
    label->show();

    //opening choose dialog
     stu_info* stufo = new stu_info(this,counter);
     connect (stufo, &stu_info::sendDN,this,&MainWindow::onDNSent);
     connect (stufo, &stu_info::sendPN,this,&MainWindow::onPNSent);
     connect (stufo,&stu_info::sendAbstand,this,&MainWindow::onAbstandSent);
     stufo->setModal(true);
     stufo->show();



    counter++;

}
qt dynamic qlineedit
1个回答
1
投票

如果我正确理解你,你想知道哪条lineedit被改变了,而不是以programmaticaly的方式改变它。

如果是这样,您可以为您的lineedit添加一些属性,然后将您的插槽连接到textChanged(const QString &)信号,并在插槽中读取您的属性。例如:

Abstandlineedit->setProperty("id", someValue);
connect(Abstandlineedit, SIGNAL(textChanged(const QString &)), this, SLOT(slotLineEdit(const QString&)));
....
void MainWindow::slotLineEdit(const QString& s)
{
  int id = sender()->property("id").toInt();
//use id
...
}

但是如果你需要在代码中的某处更改你的lineedits而不是对信号的反应,那么你肯定需要添加一些指向这些小部件的指针并使用它。

© www.soinside.com 2019 - 2024. All rights reserved.