2016-12-20 15 views
0

Я написал проект, который включает mainwindow и replacedlg.ui. Я хочу использовать replacedlg.ui в mainwindow.cpp.Как использовать replacelg.ui в mainwindow.cpp?

Я хотел бы написать такие вещи, как ui->button в mainwindow.cpp, но я не могу.

Кто может помочь мне сделать эту работу?

The whole project is here.

+0

Зачем вам это нужно? Вы просто нарушаете инкапсуляцию здесь. Вы должны писать методы в своем классе «replacelg», который будет делать то, что вам нужно сделать. – thuga

+0

@thuga я приму вас совет, если я знаю, и у меня есть better.but not.idonot знаю, как отправить текст у меня есть вход в lineedit, который в replacelg.so то, что метод, который я использую, может отправить текст в mainwindow ? – konalo

+0

Вы можете испустить сигнал в вашем классе 'replaceDlg', который содержит параметр' QString' в качестве параметра. Подключите этот сигнал к слоту в классе '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" 

 Смежные вопросы

  • Нет связанных вопросов^_^