ich habe ein Projekt mit einem MainWindow und einem Dialog beide als Designklasse im Qt-Creator erstellt. Im Mainfenster ist ein DOM XML Praser untergebracht der eine XML Datei auf bestimmte Werte durchsucht. Diese gebe ich per Signal Slot verbndung an einen Dialog weiter der diese in ausgabefenstern ( QLineEdit und QLabel ) ausgibt.
Vom grundsatz funktioniert das auch, nur werden die Werte im Dialog erst angezeigt beim zweiten betätigen des OK Buttons.
Dachte erst das es an einer Zeitverzögerung zwischen einlesen der Daten und ausgabe liegt aber daran lag es nicht.
Code: Alles auswählen
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->pushButton_ANZEIGEN->hide();
dialog =new Dialog;
connect(ui->ButADD,SIGNAL (clicked()),this,SLOT(ADD()));
connect(ui->butOK,SIGNAL(clicked()),this,SLOT(OK()));
connect(ui->pushButton_ANZEIGEN,SIGNAL(clicked()),this,SLOT(ANZEIGEN()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void MainWindow::ADD(){
QString file = QFileDialog::getOpenFileName(this,"Bitte Datei Auswählen",QDir::homePath(),"Dokumente(*.XML)");
if ( !file.isNull()){
QString info("Folgenede Datei wurde Ausgewählt:\n");
info.append(file);
QMessageBox::information(this,"ihre Auswahl",info,QMessageBox::Ok);
ui->lineADD->setText(file);
}
}
void MainWindow::OK(){
QString filename = ui->lineADD->text();
QFile file (filename);
if (file.open(QIODevice::ReadOnly)){
statusBar()->showMessage(tr("Datei Erfolgreich geladen."),3000);
QByteArray content = file.readAll();
QDomDocument doc;
QString errorMassage;
if(!doc.setContent(content, &errorMassage)){
QMessageBox::critical(this,"Fehler","Die von Ihnen ausgewählte Datei konnte nicht gelesen werden!",QMessageBox::Ok);
}else
{
int Ausgabe = 0;
//hier wird die Zeichnungsnummer aus dem XML File gesucht
QDomNodeList ZeichNummer = doc.elementsByTagName("Extract_FS_DS");
for(int i = 0; i < ZeichNummer.length(); i++){
QDomElement ZeichNummerElement = ZeichNummer.at(i).toElement();
QString Id = ZeichNummerElement.attribute ("Id");
emit ZeichNr(Id);
connect(this,SIGNAL(ZeichNr(QString)),dialog,SLOT(SetZeichNr(QString)));
Ausgabe = Ausgabe +1;}
//hier wird das ISSUE aus dem XMl File gesucht
QDomNodeList Issue = doc.elementsByTagName("Functional_schema_DS");
for(int i = 0; i < Issue.length(); i++){
QDomElement IssueElement = Issue.at(i).toElement();
QString Iss = IssueElement.attribute ("FS_DS_version");
emit ISSUE(Iss);
connect(this,SIGNAL(ISSUE(QString)),dialog,SLOT(SetISSUE(QString)));
Ausgabe = Ausgabe +1;}
//hier wird der Designer aus dem XML File gesucht
QDomNodeList DesName = doc.elementsByTagName("Functional_schema_DS");
for(int i = 0; i < DesName.length(); i++){
QDomElement DesNameElement = DesName.at(i).toElement();
QString DesignName = DesNameElement.attribute ("Designer_name");
emit DESname(DesignName);
connect(this,SIGNAL(DESname(QString)),dialog,SLOT(SetDESname(QString)));
Ausgabe = Ausgabe +1;}
//hier wird das MOD aus dem XML File gesucht
QDomNodeList MOD = doc.elementsByTagName("IGE_Diagram_Defaults");
for(int i = 0; i < MOD.length(); i++){
QDomElement MODElement = MOD.at(i).toElement();
QString mod = MODElement.attribute ("Modification");
emit modificaion(mod);
connect(this,SIGNAL(modificaion(QString)),dialog,SLOT(Setmodificaion(QString)));
Ausgabe = Ausgabe +1;}
//hier wird das MP aus dem XML File gesucht
QDomNodeList MP = doc.elementsByTagName("Requirement");
for(int i = 0; i < MP.length(); i++){
QDomElement MPElement = MP.at(i).toElement();
QString mp = MPElement.attribute ("Id");
emit MPsig(mp);
connect(this,SIGNAL(MPsig(QString)),dialog,SLOT(SetMPsig(QString)));
Ausgabe = Ausgabe +1;}
//hier wird das ATA aus dem XML File gelesen
QDomNodeList ATA = doc.elementsByTagName("Sub_ATA_DS");
for(int i = 0; i < ATA.length(); i++){
QDomElement ATAlement = ATA.at(i).toElement();
QString AtA = ATAlement.attribute ("Id");
emit ata(AtA);
connect(this,SIGNAL(ata(QString)),dialog,SLOT(Setata(QString)));
Ausgabe = Ausgabe +1;}
if(Ausgabe ==6)
ui->pushButton_ANZEIGEN->show();
} }}
void MainWindow::ANZEIGEN(){
dialog->exec();}