qt : login window에서 main window로 값 전달 질문

gusrbs82의 이미지

안녕하세요.

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 선배님들의 조언 부탁드립니다.

gilgil의 이미지

connect(login_ui->pushButton, SIGNAL(clicked()), mainwindow, SLOT(cachCookie(Cookie)));

sender의 signal 함수(clicked())와 receiver의 slot 함수(cachCookie(Cookie))의 parameter가 다르네요. parameter가 같도록 해야 합니다.

gusrbs82의 이미지

감사합니다. gilgil님.

gilgil의 parameter 조언과 아래 라스코니님의 조언으로 잘 해결 되었습니다.

저번에도 도움을 받았는데. ㅎㅎㅎ 이번에도 좋은 조언 감사합니다~(꾸벅)

라스코니의 이미지

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);
}

gusrbs82의 이미지

로그인 위젯.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 은 따로 정의를 필요하지 않습니다. Qt가 알아서 successLogin()에 대한 내용을 만들어 줍니다.
그러니 아래 부분은 빼시면 됩니다.

void LoginWidget::successLogin(Cookie cook){
qDebug()<<"sueccessLogin signal fuction Enter.";
}

그리고 signal 선언은 형만 필요로 합니다.

signals:
void successLogin(Cookie); 이런 식으로 해주세요

마지막으로 emit 하는 것이 signal-slot 사용의 모든 예가 아닙니다.
하지만 emit 이 편리할 때가 많으므로 알아 두시면 좋겠죠.

gusrbs82의 이미지

감사합니다.

signal이 따로 정의를 하지 않아도 된다는걸 알게 되었습니다.

서치하다가 signal을 함부로 정의하면 안된다.라는 말의 뜻이 이런 거였나 보네요.ㅎㅅㅎ

도움을 주셔서 감사합니다. 잘 해결 되었습니다. #ㅅ#

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.