2016-12-20 6 views
0

私はmainwindowreplacedlg.uiを含むプロジェクトを書いています。 mainwindow.cppreplacedlg.uiを使用します。mainwindow.cppでreplacedlg.uiを使用するにはどうしたらいいですか?

ui->buttonのようなものをmainwindow.cppに書きたいのですが、できません。

この作業を手助けできるのは誰ですか?

The whole project is here.

+0

なぜそれをしたいですか?ここでカプセル化を破っているだけです。 'replacedlg'クラスに、代わりに何をする必要があるかを行うメソッドを記述する必要があります。 – thuga

+0

@thugaもし私が知っていると助言を受け入れる私はbetter.but have not.idonot私は入力を持っていますlineeditに置き換えられたどのような方法の私は使用してmainwindowにテキストを送信することができます? – konalo

+0

'QString'をパラメータとして含む' replaceDlg'クラスで信号を出力することができます。このシグナルを 'MainWindow'クラスのスロットに接続します。 – thuga

答えて

2

クラス間ui変数を共有しようとしないでください。それは悪いデザインです。代わりに、クラスにメソッドを追加します。これにより、必要な作業を行うことができます。

replaceDlgクラスのテキストをMainWindowクラスに送信する場合は、信号とスロットを使用する必要があります。ここに例があります:

#include <QtWidgets> 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    MainWindow(QWidget *parent = Q_NULLPTR) : QMainWindow(parent) 
    { 
     setCentralWidget(&text_edit); 
    } 
public slots: 
    void addText(const QString &text) 
    { 
     text_edit.append(text); 
    } 
private: 
    QTextEdit text_edit; 
}; 

class Dialog : public QDialog 
{ 
    Q_OBJECT 
public: 
    Dialog(QWidget *parent = Q_NULLPTR) : QDialog(parent) 
    { 
     setLayout(new QHBoxLayout); 
     QPushButton *send_button = new QPushButton("Send"); 
     layout()->addWidget(&line_edit); 
     layout()->addWidget(send_button); 
     connect(send_button, &QPushButton::clicked, this, &Dialog::sendButtonClicked); 
    } 
signals: 
    void sendText(const QString &text); 
private slots: 
    void sendButtonClicked() 
    { 
     emit sendText(line_edit.text()); 
     accept(); 
    } 
private: 
    QLineEdit line_edit; 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    Dialog d; 
    QObject::connect(&d, &Dialog::sendText, &w, &MainWindow::addText); 
    w.show(); 
    d.show();  
    return a.exec(); 
} 

#include "main.moc" 
関連する問題