[英]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 type
行mydialog *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.