簡體   English   中英

從Qt中的對話框聲明指向主窗口的指針

[英]declaring a pointer to the main window from a dialog in Qt

這可能是一個比qt更具探索性的c ++問題。 但我找到了一種方法來做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 typemydialog *dia; 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錯誤。 我怎樣才能做到這一點。

謝謝...

有一個簡單的答案:為什么不讓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 )。 我在顯示的代碼中更正了這一點。

此方法可避免對話框與主窗口之間的緊密關系,從而使代碼更易於維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM