qt : login window에서 main window로 값 전달 질문
글쓴이: gusrbs82 / 작성시간: 목, 2016/02/11 - 4:18오후
안녕하세요.
Qt를 공부하기 시작했는데요.
login window에서 로그인을 하면 사용자 정보를 main window에 넘겨주는
signal과 slot을 만들려고 하는데요.
login window에서 main window로 값을 전달할 방법을 잘 모르겠습니다.
: connect(login_ui->pushButton, SIGNAL(clicked()), mainwindow, SLOT(cachCookie(Cookie)));
이런 식으로 하려고 했는데
: mainwindow, SLOT(cachCookie(Cookie)) 이부분이 에러가 나거나
mainwindow의 slots 함수를 인식을 하질 못하고 에러가 나더라구요.
그래서 main.cpp에 전역으로 Cookie를 두고 이 변수에 저장을 하고 값을 전달하는 방법을
쓸까 했는데. 이건.. 아닌거 같다라는 생각이 들어서.. signal, slot방법으로 해보고 싶습니다.
signal, slot을 사용해서 login window에서 main window에 접근하는 방법이
궁금합니다.
Qt 선배님들의 조언 부탁드립니다.
Forums:
gilgil.net
connect(login_ui->pushButton, SIGNAL(clicked()), mainwindow, SLOT(cachCookie(Cookie)));
sender의 signal 함수(clicked())와 receiver의 slot 함수(cachCookie(Cookie))의 parameter가 다르네요. parameter가 같도록 해야 합니다.
www.gilgil.net
감사합니다.
감사합니다. gilgil님.
gilgil의 parameter 조언과 아래 라스코니님의 조언으로 잘 해결 되었습니다.
저번에도 도움을 받았는데. ㅎㅎㅎ 이번에도 좋은 조언 감사합니다~(꾸벅)
mainwindow 내에
mainwindow 내에 cachCookie(Cookie)를 SLOT 으로 선언해 주셨나요?
그리고 login_ui 내 clicked() 함수 내에서 이런식으로도 쓸수 있어요.
connect(login_ui, SIGNAL(emitSignal(Cookie)), mainwindow, SLOT(cachCookie(Cookie)));
// 아마 login_ui->pushButton 가 아니고 login_ui 일 것 같은데.......
//.h
SIGNAL emitSignal(Cookie);
clicked() {
// do something
emit emitSignal(Cookie);
}
multiple definition Error가 나오게 되네요.
로그인 위젯.h
class LoginWidget : public QMainWindow
{
Q_OBJECT
public:
explicit LoginWidget(QWidget *parent = 0);
~LoginWidget();
private:
Ui::LoginWidget *ui;
Cookie cook;
private slots:
void loginSlot();
signals:
void successLogin(Cookie cook); /////////////////쿠키 전달 시그널 정의
};
==============================================================
로그인 위젯.cpp
#include "loginwidget.h" ////////////////loginwidget.h을 포함 1
#include "ui_loginwidget.h"
LoginWidget::LoginWidget(QWidget *parent):QMainWindow(parent), ui(new Ui::LoginWidget)
{
ui->setupUi(this);
connect(ui->LoginButton, SIGNAL(clicked(bool)), this, SLOT(loginSlot()));
connect(this, SIGNAL(successLogin(Cookie)), parent, SLOT(inputCookie(Cookie))); ////////이 부분이 쿠키 전달 connect
}
void LoginWidget::loginSlot(){
if(비밀 번호 비교)==0){
if(일치){
cook.setflag(true);
qDebug()
emit successLogin(cook); //이부분을 그렇게 했어요.
}else{
cook.setflag(false);
qDebug() }
}
void LoginWidget::successLogin(Cookie cook){ //여기에 자꾸 multiple definition Error가 나옵니다. ㅇㅅㅇ
qDebug() }
=================================================================
메인 윈도우.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "../LoginWidget/loginwidget.h" ////////////////////////////////////////loginwidget.h을 포함 2
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),ui(new Ui::MainWindow)
{
connect(ui->loginButton, SIGNAL(clicked()), this, SLOT(showLoginWidget()));
}
void MainWindow::inputCookie(Cookie cookie){
qDebug() }
========================================================
라스코니님이 해주신 조언이 이렇게 하는 게 맞는지 잘 모르겠습니다.
슬롯 안에 시그널을 emit해주는 기법도 처음이라 잘 못해서 인지
multiple definition Error가 나옵니다.
여기서 조언을 주실 부분이 있을까요...???
signal 은 따로 정의를 필요하지 않습니다.
signal 은 따로 정의를 필요하지 않습니다. Qt가 알아서 successLogin()에 대한 내용을 만들어 줍니다.
그러니 아래 부분은 빼시면 됩니다.
void LoginWidget::successLogin(Cookie cook){
qDebug()<<"sueccessLogin signal fuction Enter.";
}
그리고 signal 선언은 형만 필요로 합니다.
signals:
void successLogin(Cookie); 이런 식으로 해주세요
마지막으로 emit 하는 것이 signal-slot 사용의 모든 예가 아닙니다.
하지만 emit 이 편리할 때가 많으므로 알아 두시면 좋겠죠.
감사합니다.
감사합니다.
signal이 따로 정의를 하지 않아도 된다는걸 알게 되었습니다.
서치하다가 signal을 함부로 정의하면 안된다.라는 말의 뜻이 이런 거였나 보네요.ㅎㅅㅎ
도움을 주셔서 감사합니다. 잘 해결 되었습니다. #ㅅ#
댓글 달기