我正在编程配置器。如果单击Addbutton
,它会动态添加几个标签和LineEdit
s(请参阅下面的代码)。
我的问题如下:
在我创建Label
s和LineEdit
s后,它们将被显示,但如果用户更改了LineEdits
的值,我该如何访问该数据?更重要的是我如何知道它是哪个(第一,第二,第三)LineEdit
s或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++;
}
如果我正确理解你,你想知道哪条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而不是对信号的反应,那么你肯定需要添加一些指向这些小部件的指针并使用它。