0

これはおそらく、qt よりも最も精巧な C++ の質問です。しかし、私はこれを2日間行う方法を見つけていました。しかし、これを自分で解決することはできません。この問題について、何人かの専門家が助けてくれることを期待しています。これは私の質問です。

私の Qt アプリケーションには、メイン ウィンドウとダイアログがあります。メインウィンドウとlineEdit_1ダイアログにありlineEdit_2ます。メイン ウィンドウに pushButton があり、それを押すとダイアログが表示されます。しかし、メイン ウィンドウの lineEdit_1 にテキストを入力する必要があり、pushButton が押されたときに、そのテキストを 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:

 }

mydialog.h に追加しないと、#include"mainwindow.h"エラーなしでコンパイルされます。しかし、コードを追加すると、コンパイラはerror: ISO C++ forbids declaration of 'newMember' with no type行にエラーを出しますmydialog *dia;

#include"mainwindow.h"mydialog.hに追加したいので、ポインターを宣言MainWindow *blh;して、メインウィンドウにテキストを取得できます。

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

これは正しいですか、それとも何か間違っていますか。誰かが私にアドバイスをくれるか、間違いを指摘してください。これどうやってするの。

ありがとうございました...

4

1 に答える 1

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)。表示されたコードでこれを修正しました。

この方法により、ダイアログとメインウィンドウの間の密接な関係が回避されるため、コードの保守がより簡単になります。

于 2012-12-23T18:02:29.240 に答える