[질문] Qt프로그래밍 질문입니다.

horse76의 이미지

<client.h>
...
....
signal:
void kk(); //선언 userdefine 함수
...
...

<view.cpp>

void jj()
{
..
connect(client, SIGNAL(kk()), this, SLOT(kk()));
..
}
void kk() //구현
{
}

많은 클래스 들이 있습니다 ....그중client.h에 signal에 kk();라는 함수가 정의만되어있습니다. 그리고 사용하는 부분 view.cpp에는 kk함수가 구현되어 있고 signal인 kk가 clieck같이 버튼같은 것을 눌렀을때 발생하는 시그널이 아닙니다. 그런데 위와같이 kk 시그널이 발생했을때 kk처리함수로 처리하라는 의미는 무엇인지 궁금합니다. 그리고 서로 다른 클래스에 정의되고 구현되어있는데 왜그런 것인지 설명좀 부탁드립니다.

ddoman의 이미지

horse76 wrote:

그런데 위와같이 kk 시그널이 발생했을때 kk처리함수로 처리하라는 의미는 무엇인지 궁금합니다. 그리고 서로 다른 클래스에 정의되고 구현되어있는데 왜그런 것인지 설명좀 부탁드립니다.

다른 소스를 참고하시는데 저런 부분이 나왔는데, 이해가 안간다는 말씀이신가요? 그렇다고 이해하고 답변을 드립니다.

signal이라는걸 사용하실려면 단지 class header 파일에 선언만 해주시면 됩니다. signal 로 선언된 함수의 실제 구현부분은 moc 를 통해 나온 파일에 구현되어있습니다.
signal이라는게 단지 메세지를 던지기 위한것이기에 signal이란 메세지를 던지는 행위 자체는 굳이 사용자가 구현할 필요가 없습니다. signal 의 argument와 prototype만 선언해주면 필요한 코드는 moc가 다 생성해줍니다.

구현 해야할것은 signal이 아니라, 해당 시그널이 발생했을 때 연결시킬 slot이 되겠죠. client.h 의 class 선언안에 signal로 선언된 kk는 시그널로서의 kk이고, slot으로서의 kk는 다른 함수입니다.

connect 할때도 argument를 보면,
connect(client, SIGNAL(kk()), this, SLOT(kk()));

첫번째 인자와 두번째가 묶이고, 두번째와 세번째가 묶입니다.

첫번째인자의 멤버인 두번째 인자 시그널이 발생 되면,
세번째 인자의 멤버인 네번째 슬롯이 호출된다고 생각하시면 됩니다.

client->kk(), 와 this->kk() 라고 보면 더 직관적입니다.

:D kde.or.kr 에도 qt 질/답 게시판이 있습니다만,
답변 주실분은 많은데, qt질문 해주시는 분들이 안계시네요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.