这可能是一个比qt更深入的c ++问题。但是我一直在寻找一种方法来进行为期2天的操作。但我无法解决这个问题。我希望一些专家可以帮助解决此问题。这是我的问题。

在我的Qt应用程序中,我有一个主窗口和一个对话框。在主窗口中有lineEdit_1,在对话框lineEdit_2中。在主窗口中,我有一个按钮,一旦按下按钮,对话框就会自动弹出。但是我需要在主窗口的lineEdit_1中键入一些文本,当按下pushButton时,我需要使用Dialog来在lineEdit_2中显示该文本。这就是我试图做到的方式。我会非常感谢您的建议。

主窗口

 #include"mydialog.h"

class MainWindow : public QMainWindow, private Ui::MainWindow
{

Q_OBJECT

private:
mydialog *dia;


public:
 MainWindow(QWidget *parent = 0);


public slots:
void showMyDialog();
}


主窗口

 #include"mainwindow.h"

 MainWindow::MainWindow(QWidget *parent)

{
setupUi(this);

connect(pushButton,SIGNAL(clicked()),this,SLOT(showMyDialog()) );
}

void MainWindow::showMyDialog(){
dia=new mydialog(this);
dia->exec();
}


mydialog.h

 #include"mainwindow.h"


 class mydialog : public QDialog, private Ui::mydialog
 {
 Q_OBJECT

 public:
  mydialog(QWidget *parent );
  MainWindow *blh;


 public slots:

 }


在mydialog.h中,如果我不添加#include"mainwindow.h",则编译不会出错。但是就像我添加代码时一样,编译器在error: ISO C++ forbids declaration of 'newMember' with no type行中给出了错误mydialog *dia;

我想在mydialog.h中添加#include"mainwindow.h",因为我可以将指针声明为MainWindow *blh;并通过以下方式在主窗口中获取文本

QString str=blh->lineEdit_1->text();


这是正确的还是我做错了什么。请有人给我建议,或指出错误。我怎样才能做到这一点。

谢谢...

最佳答案

有一个简单的答案:为什么不让mydialog构造函数使用字符串?

mydialog::mydialog(QString str, QWidget* parent)
{
    // ...
    lineEdit_2->setText(str);
    // ...
}


然后,在主窗口中:

void MainWindow::showMyDialog()
{
    mydialog dia(lineEdit_1->text(), this); // instead of new mydialog(...);
    dia->exec();
}


请注意,您发生了内存泄漏(new没有delete)。我在显示的代码中对此进行了更正。

此方法避免了对话框和主窗口之间的紧密关系,从而使您的代码更易于维护。

10-04 20:38