QString von DialogWin in MainWindow übernehmen



  • Hallo,

    ich möchte von meinem DialogWindow(MyDialog) den QString(sWord) in das
    QLineEdit (lineEdit) von MainWindow(MainWindow)übernehmen!
    Kann mir da jemand weiterhelfen?

    Hier der Code von mydialog.cpp

    MyDialog::MyDialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::MyDialog)
    {
        ui->setupUi(this);
    
    	QString sPath = "F:/";
    	dirmodel = new QFileSystemModel(this);
    	dirmodel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
    	dirmodel->setRootPath(sPath);
    	ui->treeView->setModel(dirmodel);
    
    	filemodel = new QFileSystemModel(this);
    	filemodel->setFilter(QDir::NoDotAndDotDot | QDir::Files);
    	filemodel->setRootPath(sPath);
    
    	//QObject::connect(ui->listView, SIGNAL(clicked()),, SLOT())
    	//QObject::connect(exitButton, SIGNAL(clicked()), MainWindow, SLOT(close()));
    	ui->listView->setModel(filemodel);
    }
    
    MyDialog::~MyDialog()
    {
        delete ui;
    }
    
    void MyDialog::on_treeView_clicked(QModelIndex index)
    {
    	QString sPath = dirmodel->fileInfo(index).absoluteFilePath();
    	ui->listView->setRootIndex(filemodel->setRootPath(sPath));
    }
    void MyDialog::on_listView_clicked(QModelIndex index)
    {
    	MainWindow *mMainWindow;
    	sWord = filemodel->fileInfo(index).absoluteFilePath();
    	connect(ui->listView, SIGNAL(clicked(QModelIndex)), mMainWindow, SLOT(lineEdit(QString)));*/
    	ui->lineEdit->setText(sWord);
    
    }
    

    Ich habe es schon versucht mit Slots zu arbeiten aber das ging total in die Hose

    Mit freundlichen Gruessen

    Tjay

    PS: Das ist mein erster versuch ein Forum Eintrage zuschreiben, falls etwas falsch ist bitte bescheid sagen!



  • Ich ignorier mal deinen Code. Ich vermute, du hast ein Fenster, aus dem heraus ein anderes Fenster (ein Dialog) aufgemacht wird, und nachdem der bestätigt wird, willst du einen Wert zurückhaben. Dann füg halt deinem Dialog eine entsprechende Funktion hinzu, die den Wert zurückgibt. Irgendsowas:

    class MyDialog: public QDialog {
    public:
      QString getSelectedPath() const;
    };
    
    void MainWindow::onChoosePath() {
      MyDialog dlg;
      if (dlg.exec()) {
        lineEdit->setText(dlg.getSelectedPath());
      }
    }
    


  • Hallo,
    erst mal danke fuer die Antwort habe nicht so schnell damit gerechnet!
    ich habe es mal ausprobiert und er gibt mir das:

    "Ausnahme ausgelöst bei 0x00000000592EB20A (Qt5Widgetsd.dll) in untitled.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x000000AE00000008."

    aus.

    Der Pfeil markiert die Stelle wo das Problem ausgeworfen wird.

    void MyDialog::on_pushButton_clicked()
    {
    	Ui_MainWindow mWindow_ui;
    	MainWindow m;
    	 --> mWindow_ui.lineEdit->setText(m.sWordPath);
    
    	QWidget::close();	
    
    }
    


  • Irgendwie machst du was falsch. Es macht wohl keinen Sinn, das Objekt auf dem Stack zu erstellen. Du wirst doch wohl schon ein MainWindow haben?
    Sorry wenn ich dich enttäuschen muss, aber dir fehlen wohl die Grundlagen von C++, es macht keinen Sinn, gleich mit Qt anzufangen. Wenn dir nicht genau klar ist, was passiert, wirst du mit einem komplexen Framework wie Qt nicht glücklich.



  • Es ist alles vorhanden! Bsp:

    Dort gibt es einen Error! mWindow.exec funktioniert nicht!
    #include "mydialog.h"

    void MyDialog::on_pushButton_clicked()
    {
    	//MyDialog mDialog;
    
    	MainWindow mWindow;
    
    	if (mWindow_ui.exec())
    	{
    		mWindow_ui.lineEdit->setText(m.sWordPath);
    	}
    
    	QWidget::close();	
    
    }
    

    Hier funktioniert es!
    #include "mainwindow.h"

    void MainWindow::on_toolButton_clicked()
    {
    
    	MyDialog mDialog;	
    
    	mDialog.setModal(true);
    	mDialog.update();
    	mDialog.exec();
    	if (mDialog.exec())
    	{
    		ui->lineEdit->setText(sWordPath);
    	}
    
    }
    


  • Falls es hilft wuerde ich mal den kompletten code hier posten!



  • Dein erstes Beispiel, das nicht funktioniert, macht keinen Sinn. Man erstellt diese Ui Klassen nicht einfach so. Die gehören zu einem Widget und werden normalerweise im Konstruktor erstellt und initialisiert. Hier fehlt die Initialisierung (ich glaub, setupUi heißt die Funktion). Weil die Initialisierung fehlt, ist der lineEdit Zeiger ungültig.



  • Hallo,
    ich habe die Loesung meines Problems gefunden!

    MainWindow.cpp

    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(accept()));
    

    MyDialog.cpp

    MyDialog mDialog;
    mDialog.update();
    	if (mDialog.exec())
    	{
    		ui->lineEdit->setText(mDialog.sWordPath);
    
    	}
    

    Danke fuer den Denkansatz



  • Was macht mDialog.update()? Nichts.



  • Ja da hast du Recht, das war noch uebergeblieben von dem alten Code!


Log in to reply