【问题标题】:declaring a pointer to the main window from a dialog in Qt在 Qt 的对话框中声明指向主窗口的指针
【发布时间】:2012-12-23 17:41:57
【问题描述】:

这可能是一个比 qt 更具探索性的 c++ 问题。但我正在寻找一种方法来做到这一点 2 天。但我无法解决这个问题。我希望一些专家在这个问题上提供帮助。这是我的问题。

在我的 Qt 应用程序中,我有一个主窗口和一个对话框。在主窗口中有lineEdit_1,在对话框中有lineEdit_2。在主窗口中,我有一个按钮,一旦按下,对话框就会出现。但是我需要在主窗口的 lineEdit_1 中键入一些文本,并且当按下按钮时,我需要对话框在它的 lineEdit_2 中显示该文本。这就是我尝试这样做的方式。我会非常感谢任何建议。

主窗口.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();
}

主窗口.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:

 }

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

我想在 mydialog.h 中添加 #include"mainwindow.h" 因为然后我可以将指针声明为 MainWindow *blh; 并通过

获取主窗口中的文本
QString str=blh->lineEdit_1->text();

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

谢谢...

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    有一个简单的答案:为什么不让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 分钟来解决这个问题 :) 你能指出我如何避免内存泄漏吗?我的代码有什么错误。为什么我们不能在这种情况下使用指针。你说的亲密关系是什么意思。请回复,我是qt新手。
    • 完成。抱歉,我使用了错误的“以前”,现在已修复。
    猜你喜欢
    • 2014-12-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多