这可能是一个cq问题,而不是qt。但我找到了一种方法来做2天。但是我无法解决这个问题。我希望有些专家可以帮助解决这个问题。这是我的问题。
在我的Qt应用程序中,我有一个主窗口和一个对话框。在主窗口中,它有lineEdit_1
并位于对话框lineEdit_2
中。在主窗口中我有一个pushButton,一旦按下该对话框就会显示出来。但我需要在主窗口的lineEdit_1中键入一些文本,当按下pushButton时,我需要使用Dialog来显示该文本的lineEdit_2。这就是我尝试这样做的方式。我会非常感谢eny的建议。
mainwindow.h
#include"mydialog.h"
class MainWindow : public QMainWindow, private Ui::MainWindow
{
Q_OBJECT
private:
mydialog *dia;
public:
MainWindow(QWidget *parent = 0);
public slots:
void showMyDialog();
}
mainwindow.cpp
#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();
这是正确的还是我做错了什么。请有人给我建议,或指出eny错误。我怎样才能做到这一点。
谢谢......答案 0 :(得分:2)
有一个简单的答案:为什么不让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
)。我在显示的代码中更正了这一点。
此方法避免了对话框与主窗口之间的紧密关系,从而使您的代码更易于维护。