프로그래머를위한 LSI - TEC 열고 공석
LSI - TEC , 회사 통합 sitema USP의 국제적으로 유명한 연구소의 일부는 디지털 TV와 관련된 프로젝트를 개발하는 작업 인재를 찾고 있습니다.
요구 사항 :
- C, C + + 또는 Java;
- Sitema 임베디드 리눅스;
- Subversion을;
- Autotools;
위치 :
상파울로 대학 - 대학 도시 캠퍼스
이해 당사자가 자신의 이력서를 보낼 수 있습니다 :
Hillel Becher <hilel@lsi.usp.br>
블로그 서버를 마이 그 레이션
블로그 기술 어려움을 겪고있다 활용, 전 서버에서 변화와 워드 프레스의 깨진 버전을 업데이 트하기로 결정했습니다.
워드 프레스의 업데이 트에 대한 자세한 내용은 버전에서 버전에 따라 다를 수 있으며, -에서 찾을 수 있습니다 사이트 .
나는 가져오기 / 워드 프레스 자체의 수출에 대한 옵션을 사용할 수 있지만, 기존의 공급자의 문제점 중 하나는, 내가 블로그의 관리 영역을 액세스할 수 없습니다라고했다. 아무것도의 단일 업로드하지 않고 더 이상 블로그에 로그인할 수없는 내가받은 응답이 제공되었습니다
"... 워드 프레스의 개발자에게 연락 ..."
그때 경쟁에 연락하여 손톱으로 마이 그 레이션하기로 결정 ...
제가 사용하는 사전 할부 상환은 아주 간단했고, 다음과 같습니다 :
새로운 공급자를 채용
제가 몇 가지 인터넷 검색을 한 친구를 의논하고, 마지막에 단지 지불 확인에 대한 형태, 신용 카드 번호와 기다려를 작성했습니다.
지원
나는 새로운 공급자의 확인을 기다렸다 동안, 나는 블로그를 백업했습니다. 제가 너무 많은 "쓰레기"가 설치되어있는 것처럼, 그냥 게시물과 함께 데이터베이스를 백업하고, 워드 프레스의 아주 깨끗한 버전을 사용하기로 결정했습니다.
MySQL을 백업하려면 나는 명령줄 도구 mysqldump 중 하나를 사용합니다. 최고의 기능 (제 생각에) MySQL을 사용하고, 그 도구 중 하나는 원격으로 그들을 사용하는 능력입니다. 이것은 내 피부에게 SysAdmin의 시간에 몇 번 저장하고 있습니다.
명령은 간단했다 :
=my.old.mysqlserver 사용자 @ 호스트 : ~ $ mysqldump - 호스트 = my.old.mysqlserver - 사용자 = myuser - 비밀 번호 mybkp.sql - 데이터베이스 myblogdatabase> mybkp.sql
= My.old.mysqlserver - 호스트 : 내 MySQL 데이터베이스에있는 호스트에 연결
- 사용자 = myuser : 연결이 서버를 사용합니다.
- 비밀 번호 : 비밀 번호 프롬프트를 요청합니다. 제가 직접 암호를 입력하고 싶었다면, 한 - 비밀 번호 = mypass을 수 있습니다.
Myblogdatabase - 데이터베이스 : 내 블로그에서 사용하는 모든 데이터베이스 테이블 'myblogdatabase'의 덤프를 확인합니다.
> Mybkp.sql : 파일에 출력을 리디렉션합니다.
Mysqldump는 것과 동일한 상태로 데이터베이스를 재현하는 데 필요한 모든 SQL을 생성합니다.
복원 데이터를
덤프 파일의 시작 부분에 기존 데이터베이스에 대한 참조입니다. 새 데이터베이스가 다른 이름을 가진 경우에는 덤프 파일을 편집해야합니다. 이것은 명령 SED와 함께 할 수 있습니다 :
s /` olddatabase `/` newdatabase `/ mybkp.sql > mynewbkp.sql 사용자 @ 호스트 : ~ $ SED S / olddatabase `` / `` newdatabase / mybkp.sql> mynewbkp.sql
복원은 MySQL의 프롬프트를 사용하여 매우 간단합니다 :
=my.new.mysqlserver --user =myuser --password 사용자 @ 호스트 : ~ $ MySQL을 - 호스트 = my.new.mysqlserver - 사용자 = myuser - 비밀 번호 MySQL의>를 사용 newdatabase; MySQL을>. mynewbkp.sql
이 logamos, 우리는 여전히 비어있는 새 기지를 입력하고, 새로 기존의 테이블과 데이터를 재현하기 위해 SQL 문을 함께 전체 덤프 파일을.
워드 프레스 업그레 이드
워드 프레스 업데이트의 기본 단계 다음 설치 : 다운로드 풀고는 원하는 위치로 콘텐츠를 이동하고 파일 WP - config.php를 편집합니다.
마지막으로, 브라우저, 파일을 실행
http://my.blog.root.path/bla/bla/bla/wp-admin/upgrade.php
그리고 짜잔! 당신은 로그인, 관리자 사용자 임의의 비밀 번호를 받게 될 것입니다.
워드 프레스 설정
공급자가 서비스를 제공하는 경우, 그것은 대개 사이트의 기능을 사용하는 두 가지 방법을 제공합니다. 다른 이상한 URL과 같은 기능을 제공 이후 하나는 주소로 도메인을 사용하는 표준 방법입니다. 오늘은 알게 이유 : DNS 공급자가 이전에 임명 동안, 나는 이전 사이트 (말) 기능을 방해하지 않고 이상한 새로운 공급자의 URL에 접속.
WordPro가 설치된 후, 내용을 액세스하는 모든 시도는, 기존의 블로그로 이동. 그럼 블로그의 URL을 구성하는 두 가지 옵션이있다는 것을 기억. 충분이 데이터베이스에 어디 있었는지 알고하는 것이었다. 테이블 이름의 논리에 따라 테이블 wp_options에 도착했다.
플러그인과 테마를 설치하는 동안 GUI 도구 MySQL의 쿼리 브라우저를 사용하여, 필드 필드 'option_name'옵션 'siteurl'와 이상 해당 URL에 '고향'에 해당되는 '를 option_value'변화, 그리고 마이 그 레이션하는 동안 그것을 사용하고 즐기는 시작 . 모두 완료되면, 내가 DNS를 변경하고 마지막 옵션에 원래 값을 복원. 이 명령줄는 이런 모양이 될 :
; MySQL은> SELECT * wp_options 한도 1에서; = 'http://mydomain.com/etc'을 option_value wp_options; where option_value = 'http://mydomain.com/etc' ; Query OK, 2 rows affected ( 0.02 sec ) Rows matched: 2 Changed: 2 Warnings: 0 mysql > 2 변경 : 2 경고 쿼리 확인, 2 행이 영향 (0.02 초) 행 일치, 9 월 wp_options은 = 'http://mydomain.com/etc'을 option_value = 'http://url.estranha.com/etc'을 option_value : 0 MySQL은>
SQL 명령은 마지막으로 업데이 트 옵션은 동일한 URL과 세 번째를 확인하는 두 번째 테이블의 필드가 어떤을 알고 가장 먼저했다. 그 후, 블로그는 이미 올바른 작업 주소를 가리키는이며, 반환이 정상적으로 사이트를 통해 만들 수 있습니다.
결론
당신은 모든 데이터를 손실 위험 때문에 손톱에 블로그, 최고의 옵션이 아닙니다 마이 그 레이션. 제가 워드 프레스의 기능과 주변의 도구 약간을 알고 있기 때문에 그냥이 가까이있어. 아직도, 나는 서스펜스 내 순간을했다. 게시물에서 별도의 가정을 유지에도 불구하고, 나는 여러분의 의견과 일반적으로 옵션을 저장할 수 없습니다. 어떤 면에서 그것은 스마트 가서 사이트 내 매주 백업을하고 가서 나를 위해 좋은되었습니다.
Patxi !!!!!!!!!!!
나는 동일한 작업을 수행하면 매일 캠퍼스 파티 브라질로보고되었습니다 얼마나 많은 블로그, 중복 것입니다. 사실, 난하지 못했기 때문에 않았고, 난, 난 여기서 당신을 말해주지 않을 수있는 이유입니다.
이제는 위대한 친구 구스타보 곤잘레스의 전화를 다음과 BR - Linux에서 출판을 , 난 "휴가"챙겼는데 및 캠퍼스 파티에서 일할 자원 봉사자로 위치를 신청하기로 결정했다. 이미 자유 소프트웨어 프로젝트에 대한 자원 봉사지만, 물리적으로 처음 참석 것입니다.
제가 연락있어, 이메일 이력서 (이것은 기술 수준에서 지원자를했다), 그리고 카니발은 월요일에, 나는 화요일 오후 Ibirapuera에서 비엔날레 건물에 참석할 것을 요청하는 이메일을 받았습니다.
일단 거기, 나는 Polkan (콜롬비아)와 파블로 및 엔지니어 것입니다 Samira (스페인)에 소개되었습니다. 우리는 어디 이벤트 알고 거기에 다음날로 배치됩니다. 그들은 약 30 자원 봉사자를 기다렸다가, 2 다수있었습니다. 그리고 또 지금은 좋은 친구 Franci.
우리는 다음날까지 더 많은 자원 봉사자를 찾는 임무를 가지고 집에 갔다. 반대로 모든 상황 포인트에도 불구하고, 내 친구 제라드의 도움을받습니다. 그것으로 매우 행복, 나는 리우데 자네이루에있는 어릴 적 친구, 페르난도,라고, 그리고 그가 자발적으로 상파울루에 같이 설득했다. 항상 prórpio 주머니를 지불 도움을 기꺼이하고 자발적으로 온 사람. 그것은 dixou은 제 여자 친구 Luciana, 성령을했는데, 그녀가 여기 온 비행기를 데리고 설득 나를 너무 행복합니다.
재의 수요일 - 2008년 6월 2일
당신의 가방을 유지, 아침에 제랄도 페르난도로드를 추구하고, 우리는 근처 padoca에서 커피를했고 Ibirapuera 갔어요. 일단 거기, 야고보와 패트리샤 (용감한 새로운)과 함께 Franci을 찾아 일을하러 갔지요. 미션 : 네트워크 케이블의 이상 50km (예, 네트워크 케이블의 5만미터을 !!!). 누른 상태에서 테이블을 지출하기 그러나, 가장 큰 도전은 엔지니어가 원하는 걸 이해하는 것이었습니다. 바벨의 수수께끼는, 세 방향 핸드 셰이크를 통해 해결되었다 : 그들은 스페인어로 천천히 이야기, 우리는 포르투갈어로 천천히 반응하고, 우리는 스트립은 영어에 대한 주장 않았다. 식은 죽 먹기야!
하루의 끝에 공항에서 Luciana을 추구하고 우리 모두 케이블을 체포에서 지친 침대로 갔다.
목요일 - 2008년 7월 2일
더 많은 자원이 나타났다 없습니다. 우리는 서른 여섯에 대한 작업을하고 있었다. 우리는 네트워크 인프라가 시간에 준비가 될 수 있도록하기 위해 최선을주기 위해 자동 계약했다. 우리는 마술이 전날 배운하고 케이블을 잡고 엔드에 대한 은행의 지원 팀을 좌표 사용합니다. 우리는 5 개 이상 000 RJ - 45 커넥터를 테스트합니다. 이 날, 우리는 시간 추적을 잃게 시작합니다. 여기에서 모든 보고서 타임 라인을 손상있을 수 있습니다. 우리에게 가능한 세 가지 동사되었습니다 : 작업, 수면, 식사. 오늘의주의 그 장갑 메이슨 구매의 생각 이었어요. 그들은 개발자의 손을 저장 ![]()
금요일 - 2008년 8월 2일
첫날부터 우리는 언어 어려움이 아니지만 장애 될 것이라고 보았다. 우리는 명령을 받게 제공 및 / 또는보다 더 중요한 것을 배웠습 이해하고 이해했습니다.
우리는 커넥터를 테스트를 계속하고, 하루의 끝, 섬유 이상의 이천m가 시작 조심스럽게 무거운와 곰팡 나무 아래에 채널을 보호해야합니다. 섬유의 절반이 릴리스되었습니다. 마감일은 접근했다. 사방에서 전압. 우리는 실패하지 못했습니다. 우리는 그것에 자신을 커밋합니다.
많은 주장 후, 페르난도 파블로 물론, potuñolish에서 비공식적인 대화를 위해 우리와 함께 떠날 설득!
토요일 - 2008년 9월 2일
수면 4 시간은 금요일 오전 이후 우리는 금요일에 시작 섬유의 첫 번째 절반을 보호하기 위해 채널을 배치하기 시작하고, 그것은 문제를 많이했다. 출시 섬유의 나머지 부분에 대한 큰 문제는, 그것을 손상 수있는 그것이 상처로 사람의 움직임이 있었다고 한 번에 실행하는 것을되었습니다. 그녀는 부드럽게 출시하고 보호했다, 또는 작업이 위험해질 수 있습니다. 그 순간은 늦은 오후에했고, 적은 수의 사람들이 Pitaco를 제공과 함께, 우리는 훨씬 더 빨리 섬유의 나머지 부분을 실행합니다. 그럼에도 불구하고 밤 실행 섬유를 varamos. 익명 이후 발록, 지출의 둥지의 초기 섬유 번들을 변환 크게 행사 후 동일한의 제거를 속도, 하나 모두를 조직 Luciana에 대한 포인트.
일요일 - 2008년 10월 2일
테스트, 패치, 설정 및 장치. 모든 상관없이 노력을 작동해서는 안됩니다. 이벤트는 다음날 시작됩니다. 우리는 태양이 잠시 동안 잠을 어디에 이런 시간에 작동합니다. 우리는 이벤트 기간 동안 업무의 변화를보고했다. 여섯 오후 7시 다음날 23:00까지 오후부터 작업합니다. 다른 교대는 사랑스럽게 [아니, 여기가 작성되지 않습니다 campuseiros, 재단, 행사 기간 동안 이름을 바꾼 재단 Vanzolini에 의해 보장됩니다 !!!].
잠 : 우리는 마음에 하나의 목표와 함께 집으로 갔다. 그리고 우리가 다음 하루에 한 유일한.
월요일 - 2008년 11월 2일, 그 날이
우리는 공식 열기 전에 이벤트에 도착했다. 나는 이상 실행되는 영광을했고 거의 문화 우리의 장관을 함께 혈안이 Reporterontes의 무리에 짓밟힐. 나는 rhinos 더 예의있다 생각합니다. 그들과 달리 장관은 친절하고 공손했다. 예를 따라야합니다.

여기에서, 우리는 밤에 일을하고 이벤트 하루 되세요 했어요. 수면? "! 수면은 겁장이입니다"그리고 그것은 우리의 친구에게 Colombians 강타한 "! 브라질은 인간이 아니라고"그들의 단어 ...
전통 적용 범위 :
진정제
등록,식이 제한을 가진 자들에 대한 대체 공급시 약속이지만. 나를 위해 음식은 좋았지만, 거의 모든 고기를했고, 반응 조롱 미소를 받았다 때문에 많은 초식 당연히 불평했다. 나는 봤어. 유감. 더 나쁜 것은 음식을 판매하는 유일한 장소 안에 행운을 부과한다는 것입니다. 참가자들이 샌드위치를 먹을 수있는 공원을 떠나 강제하고, 나중에 보안을 위해 소멸됩니다. 쪽팔린 줄 알아라!
트로피 "주의 메이드"는 행사에서 모든 다른 회사와는 달리, 선전들로 가득 찬 배낭과 함께 자원 봉사자를 제시 거부 통신 회사 이벤트의 메인 스폰서로 이동합니다. 가장 바보 같은 소리는 변명되었습니다
"자원 봉사자 배낭을 할 자격이 없습니다. 가방은 가입자를 지불할 수 있습니다. "
그래, 그래, 그들은 바로, 계산해야하는가? 틀렸어. 남은 사람 많은 일요일 오후에 모여 있었다. 모든것을 중지합니다. 나는 자원 봉사자로 적용 멀리서 친구를 가져, 그 회사에 대한 광고 게재되었다 네트워크 인프라를 구축할 수 있도록 우리 자신의 돈을 세고있다. 그럼 제가 건배를 할 "권리"가 없다는 것을 들었어요. 처음에 우리는 자원 봉사자가되었습니다. 우리는 기꺼이 거기에 갔어. 공짜야. 보답으로 아무 것도 기대하지 않고. 다음 시간에서, 나는 내가 다른 잠재 고객이 동일한 회사의 네트워크를 사용할 수 있도록 도움을 아침에 즉, 그 회사의 잠재적인 고객과 뱃지는 "기술 지원"라는 사실로이 서 "오른쪽"같은 회사의 마케팅 자료에 액세스하려면? 역설의 비트가 있나요?
여기서 요점은 축배를 원하는 문제가되지 않습니다. 문제는 그가 행사에서 근무 때문에 잠재적인 고객으로 내가 완전히 무시 되었기 때문입니다. 헌법에 그것을 차별이라고합니다. 어떤 의미에서 그들은 이상의 $ 10.00 비용은하지 않는 선물을받지 않기 때문에 배가 안 가겠 그래서 아주 잘 날 서비스를 제공 Targus을 사용 이후로, 무료로 선전하는 작은 녹색 가방을 메고에 관심이 있어요. 요점은이 회사가 이벤트의 주요 수혜자 이후, 나 자신의 좋은을 위해 무료로 작업에 주로 사용되는 느낌이다. 이러한 및 기타 들면, 내가 작년에 자신의 고객이 아니었고, 난 후회하지 않아요.
이 좋은 : 금요일, Luciana의 가방을 가지러 집으로 돌아갔다, 토요일 오전에 성령으로 돌아갑니다 것입니다. 우리는 자정 이후 Ibirapuera에 도착 었죠. 평소와 같이 게이트 3을 입력하려고하면, 아무도 들이지 말라고 명령을받은 주장 공원의 보안에 의해 소멸되었다. 그들은 매우 아이 러 니한하고 무례한있는 조직을 전화를 거부했습니다. 세부 사항 : 모든 배럴 제대로 인증 및 배지 이벤트되었고, 더 일하 밖에 있었다 사람들이 다른 사람 (15 사람) 먼 도시에서 온과 이벤트의 텐트에서 자고 했지. 수면을 입력 금지됩니다. 잠을 외국인 입국이 거부되었습니다. 전화가 건물 안으로 잘 작동하지 않았기 때문에 우리는 문제가 전화로 조직에 이야기했다. 결과 : 두 시간짜리 campuseiro가 와서 주제에 관심이 될 소녀를 동반 때까지 우리가 게이트에 들어가게되었다. 그는 신속하게 기술 지원을 실행하고 파트너를 경고했다. 15 분 나중에 사람들이 올 수 있도록 "마법"주문이있었습니다. 발. 차가 조직 (WHO 그가 어떤 주문 알고있다), 대화하고, 지금은 다시 무료 입장, 자동차를 보낼 공원 밖 중지되었습니다.
또 다른 좋은 : 자원 봉사자가 파란색 주차권을 변경하는 늦은 5 분 동안 벌금을. 그 녀석 집에 단풍, 이봐 Ibirapuera에서 무료로 일을 기꺼이 전체 구슬 해고를 구입하고 무료로 작업을 위해 벌금으로 이동하여 티켓을 갱신할 수 후반 오분은 이미 지불되었습니다 있습니다. 불평 권리 없습니다. 자원 봉사 주차장은받을 수 없습니다 ... 부드러운입니까?
파티 대체 : 클래스 액스. 정말로, 아무 가치가 없습니다! 밤중에! 더 나쁜, 그것은 공개되었습니다! 그리고 모두 두 공공 문제를했다 ...
미친개와 함께 사진을 얻을하지 마십시오. Luciana으로 해냈어! ![]()
긍정적인 포인트
주요 기술 혁신은 마이크로 소프트에서 이벤트를 제시했습니다 : 5.5Gbps의 사용 가능한 대역폭을 가진, 그것은 믿을 수와 전례 이벤트 MSN 설치 CD로 연결됩니다. 지금까지 어떻게 그것없이는 살 수 있을까?
제가 참석 회담의 레벨 (잠없이
저는 믿습니다) 이벤트의 초점과 일치했다.
군중의 애니메이션. Patxi !!!!!!!!!!!
미친 개 (Mad Dog)의 존재.
브라질 육군 M60을 아는 우리의 오랜 친구 레이더를 볼 수 있습니다.
마크 브리지스하여 강의. 솔직히, 가장 놀라운 중 하나가 내가 본했습니다. 그는 당신이 자신의 노력에 자부심을 느낄 수 있습니다. 오직 청각과 독특한 무언가로 국가 대표의 의미를 말할 때 그의 눈이 빛나는 확인하여. 당신은 말로 설명할 수 없습니다. 그것은 몇 분 동안 기립 박수있는 유일한 스피커되었습니다. 이 경험은 돈을 지불하는 사람 중 하나였습니다.
나는 가장 큰 플러스 지점 다른 나라에서 온 사람들과 경험을 교환하는 기회를 갖게하는 것이었다 생각합니다. 우리는 영원히 계속 될 것이다 좋은 친구를 만들었습니다. 우리는 언어가 존중하고 좋은 것이다 한 장벽하지 않다는 걸, 다른 것들 사이에서 배웠습니다. 책임, 우정과 헌신, 우리는 우리가 일반적으로 불가능한 것 일을 만들 수 있습니다. 우리는 포르투갈 말을하지 못했 영어 않았 스페인어하지 않았다. 우리는 우리가 목표를 달성하기 위해 LED 시너지 효과를 개발하기 위해 충분한 무언가에 대해 얘기하고있었습니다.
가장 중요한 것은 그들이 일반적으로 네트워크 인프라 및 지원 작업하지는 않지만, 우리는 재미 있다고했다. 있어도 두 주 동안 거의 모든 수면 경우, 서비스에서 밤을 선회. 우리가 캠퍼스 파티에서 집으로 데려하면 금보다 더 귀중한 보물되었다. 돈도 그것을 지불하지 않습니다.
"잠시 기다려주십시오"
난 단지 포켓 사전, 포르투갈어, 말하기 않고 콜롬비아에서 온 구스타보를 언급하지 않을 수 있습니다. 첫날 나는 손에에서 "사전을 보시고 생각 자백? 하지만 이것뿐만 아니라 영화에? "일주일 후에 남자가 거의 포르투갈어 유창하게 말하기되었습니다. 제가 스페인어 포르투갈어와 유사한되는 자르기 같이하지, 포르투갈어, 남자는 진실에 대해 이야기하고있었습니다! 그는 달성하기 위해 주장했다. 주목할. 재미있는 것은, 그 사람에게 듣고 "제발, 잠깐 만요,"그는 사전에 어떤 단어라도 검색 것이다 문구 때마다 고 말했다.
마감
일요일에 14시시 이후, 모든 장비를 따로 데리고 섬유를 수집합니다. 취소해야 할 훨씬 더 쉽습니다 ...
우리가 사회 상파울로 펄 Mongers의 회의에 우리 외국인 친구를하지만 밤에는 그날 밤 너였구나.
나는 우리와 함께 일을하고 캠퍼스 파티 브라질하기 위해 땀을 흘린 모든 성공했습니다 감사합니다.
랙에 중 일부 사진이 확인할 수 링크를 .
신호 슬롯 및 타이머 - QT, 부 II에 시작
이 게시물에서 나는 QT에서 초보자를위한 작은 튜토리얼을 할 수있는 게임을 따랐다. 이번엔 내가 자신의 신호와 슬롯 및 타이머를 처리할를 만드는 방법을 보여줍니다.
소스 코드는이에서 찾을 수 있습니다 링크 .
예제 프로그램은 클래스를 사용하는 타이머이다 QTime , QT의 주요 클래스 중 하나를, 그리고 당신에게 수업에 계산기를 사용하여 스타일 LCD 디스플레이가 표시됩니다 QLCDNumber를 .
QT와 타이머
QT에서 가장 기본적인 지원 타이머 방법을 제공 QObject 클래스에서 사용할 수 있습니다 : startTime () : QObject를 하고 QObject : : KillTimer () . 첫 번째 방법은 고유 ID를 반환하고 두 번째 타이머는이 ID를 통해 타이머를 종료됩니다.
작업이 들어 있지만,이 메커니즘을 사용하여 코드 조각은 "이벤트 루프"안에 있어야합니다. 일단 타이머가 그것 수시로 시작 (시간 초과) 응용 프로그램을 만드는 Dispater QTimerEvent 이벤트가 처리 될때까지 프로그램의 정상적인 흐름을 방해.
최대 제한이 정의되지 않은, 그건 년 초과와 타이머를 만들 수 있습니다, 그러나, 최소한의 시간은 시스템에 따라 다를 수 있습니다. 리눅스 2.6.x이가 (기본값은 4입니다 MS) 구성할 수있는 동안 Windows Vista의 최소 타이머는 10 MS입니다. Qt는 요청에 따라 모든 이벤트를 제공하기 위해 노력할 것입니다하지만, 시스템이 허락하지 않는다면 그것은 드롭 "흑자를."
타이머 스레드에서도 사용할 수 있지만, 당신은 이벤트 루프 내부되는 상태를 존중해야합니다. 스레드는 항상 별도의 기사를받을 자격이 ...
클래스 QTime는 일부 기능을 사용, 타이머보다 높은 수준을 구현합니다. 하나는이다 singleShot () : QTime 한 번 이벤트를 발생시킵니다.
광범위한 설명서 및 지루한 반복을 읽고,하지만 날 믿어, 당신은 QDorDeCabeca을 많이 저장됩니다 ...
신호와 슬롯에 관한 자세한
신호와 슬롯은 개체, QT의 중앙 중 하나를 사이에 통신을 위해 사용됩니다. 이벤트를 처리하는 콜백을 구현하기보다는이 시스템에서, 우리는 프로그래밍이 더 직관하고, 슬롯에 신호를 연결의 개념을 사용합니다.
신호와 슬롯에 의해 처리하는 수업 방법입니다 메타 객체 컴파일러 (moc) 소스 코드를 컴파일해야하기 전에. 그들은 표준 C + +, fazum moc는 소스 코드를 구문 분석되므로 발생 compilable의 일부가 아닌 특별한 진술을했습니다.
신호와 슬롯을 구현하는 클래스에 moc 명령을 실행하여 소스 코드의 특정 양의가 생성됩니다. 프로그램의 사용과 qmake , moc는 프로그램에 대한 호출은 프로그래머에게 투명하고, Makefile에 달려있다.
클래스가 신호와 슬롯을 구현할 수 들면, 그것은에 액세스할 필요가 메타 객체 시스템 . 그래서 클래스에서 상속해야합니다 QObject 와 하위 클래스, 그리고 매크로가 필요 Q_OBJECT 개인 정보 보호 정책 자신의 영역에 있습니다. "슬롯 [| | 보호 개인 공개]"준비 완료, 간판 섹션 및 슬롯에 섹션 '신호'에 선언됩니다.
선언 이후에 슬롯이 후, 다른 일반적인 방법으로 정의, 명시 된 것처럼 다른 방법으로 호출할 수 있습니다. 이미 징후가 좀 더 섬세하고 있으며, 오직 선포하고 프로그래머에 의해 정의됩니다. 그 이유는? 빌드하는 시도의 끝에 메시지 :
TMP / moc_mydisplay.o : signalPlay () '함수는`MyDisplay에서 : ~ / 스톱워치 / tmp를 / moc_mydisplay.cpp : 89 :`MyDisplay의 여러 정의 : signalPlay () ' TMP / mydisplay.o : ~ / 스톱워치 / mydisplay.cpp : 169 : 처음에 이곳에 정의 collect2 : 신분증 1 종료 상태를 반환 만들기 : ** [스톱워치] 오류 1
파일 내부 moc_mydisplay.cpp 다음 코드를 생성한다 :
/ / 신호 0 signalPlay ( ) 공극 MyDisplay : signalPlay () { activate ( this , & staticMetaObject , 0 , 0 ) ; QMetaObject : 활성화 (이, & staticMetaObject, 0, 0); }
예, moc는 QT의 이른바 메타 방식의 정의와 신호를 생성합니다. 따라서, QT에서 신호의 시체를 정의하는 것은 불법이며 방법을 다시 설정하여 컴파일 오류를 생성합니다. 하자 moc는 당신을위한 신호의 구현을 담당.
연결
그것은 더 좋은 단지 설정 신호와 슬롯 없습니다. 그들이 상호 작용하는 방법을 당신이 정의해야합니다. 이 작업을 수행하는 방법) (연결을 통해 연결하여 모든 후계자의 방법 존재 QObject . 이 moc는 신호를 구현할 수 있도록 그 같은 매개 변수 (S) 슬롯 (S) 연결 (S)에 대한 호출 결과를 호출합니다.
연결에 따라 신호도 다시라는 마지막 슬롯과 같은 값을 반환할 수 있습니다. 이거 정말 안전하지 않습니다 여러 슬롯에 연결된 신호 그러므로, 아무것도라는 이름의 순서를 보장하지 않습니다.
주어진 신호가 바로 두 번째 신호에 연결될 수 있습니다. 첫 번째 신호에) (방출 다음에 상응하는 그 이후, 두 번째 신호에서) (방출 두 번째로 moksha, 첫 번째 호출에서 호출 결과를 만드는 단계 이후에, 이것은 다른 방법에 연결된 전화에서 이렇게 결과 .
연결하는 방법
이 신호와 슬롯을 연결하는 세 가지 방법은 기본적으로하고 올바르게 사용하지 않을 경우 것은 발견할 수 몹시 어려운 버그의 원천이 될 수 있습니다. 연결이 양식은 연결 () 메서드에 추가 매개 변수로 전달됩니다. 그들은 다음과 같습니다
연결 직통 : 슬롯은 즉시 신호가 신호가 발행되었습니다 스레드에 발행되었습니다라고합니다. 이것은 슬롯에 직접 전화로 역할을합니다.
대기중인 연결 : 신호가 전송되고 슬롯에 대한 호출은 QT의 내부 목록에가는, 그리고 신호가 전화 또는되지 않은 관계없이 슬롯 즉시 반환됩니다. 이벤트 루프는 해당 목록을 처리하고 나중에 전용 슬롯은 객체가 슬롯을있는 스레드에서 호출됩니다.
자동 연결 : 이것은 연결의 유형을 지정하지 않을 때 사용되는 기본 유형입니다. 그것은 중 하나입니다 "악의 씨앗" , 그것은 두 개의 행동을 제시 : 신호와 슬롯은 같은 스레드에있는 경우, 직접 연결로 작동하지만, 별도로 대기중인 연결을 사용할 수 있습니다.
대기중인 연결을 차단 : 응!? 단지 세게 아니었나? 음, 읽고 그 기사의 장점 중 하나이다 : 당신이 문서를 일관성 저장! 이 연결 신호가 적법하게 실행될 때까지 스레드가 차단되어있는 신호를 제외하고 대기열에 연결하는 것과 비슷합니다. 단 매우 신중하게 사용해야합니다, 그리고 다른 스레드에서 신호와 슬롯. 오용은 교착 상태가 발생할 수 있습니다. 이 같은 것을 볼 때 당신은 알게 될 겁니다 :
사용자 @ 호스트 :. ~ / 스톱워치 $ / 스톱워치 Qt는 : BlockingQueuedConnection를 활성화하는 동안 감지 죽은 잠금 : 보낸 사람입니다 QPushButton (0x807e2d8) 수신기는 MyDisplay (0x8076ac0)입니다
의미 무엇에 대한 질문이 주소로 "물체가있는 스레드" QT arespeito 스레드를 참조하십시오.
항상 신호, 슬롯, 스레드와 타이머와 큰 돌봐. 이들은 QT의 핵심 기능은 있지만, 그 오용 찾아낼 매우 어려운 버그로 이어질 수 있습니다. 그것에 대해 모든 설명서를 참조하십시오.
아래 소스로
우리의 예제는 두 개의 클래스와 MyDisplay 스톱워치 및 일반 파일을 기본으로 구성되어 있습니다. 메인 및 단지 QApplication 객체 스톱워치를 만듭니다. 클래스는 버튼 및 LCD 디스플레이 스타일로 대화 구성된, 프로그램의 MyDisplay 영상 부분을 담당. 스톱워치 클래스는 타이머를 표시하고 구현하는 위젯을 생성합니다. 이 아키텍처는 가장 elegent하지 않습니다, 클래스 스톱워치의 MyDisplay에서 상속 더 흥미로운. 하지만 그건 거의 신호와 슬롯을 사용할 필요가 없습니다. 재미가 없잖나
우리가 외부와 통신할 수 개체를 원할 때 신호와 슬롯의 사용이 명확된다. 일반적으로, 클래스 외부 건지 모르겠어요. 그들 내에서 외부 개체에 포인터를 전달, 그것은 캡슐을 상처와 코드가 덜 일반합니다. 우리 예제에서, 신호와 슬롯을 사용하는 더 재미있는가 일반 또는 캡슐에서 길을 잃지 않고 들어, 객체 (내부 스톱워치) /에서 객체 스톱워치로 보고서 이벤트 (외부 Mydisplay)에 myDisplay입니다.
Qt 디자이너 (다른 문서에 제가 얘기를합니다)의 도움으로, 그 대화 상자, 버튼과 LCD를 만들었습니다. 이후 우리 목적에 맞게 코드를 단순화. 어떻게 myDisplay는 QDialog에서 상속, 이것은 간접적으로 신호와 슬롯 그냥 클래스 선언의 전용 섹션에서 Q_OBJECT 매크로를 추가 사용하려면 QObject에서 상속됩니다. 그 후, 다른 보조 방법 중 추가 :
공공 슬롯 : long ) ; slotDisplayValue 무효 (길이); 개인 슬롯 : slotPlay의 무효 (); slotStop의 무효 (); 신호 : signalPlay의 무효 (); signalPause의 무효 (); signalStop의 무효 (); signalReset의 무효 ();
흔적이 버튼을 클릭에 관련된 외부 이벤트에 통신합니다. 대중이 외부 타이머 진드기로부터받을 수있는 동안 이미 민간 슬롯은 사전 처리 절차를 만들 것입니다. 따라서 클래스는 외부로 정보를 전송하고 반대쪽에 뭐가 모르고, 외부에서 정보를받습니다. 좋은 오래된 인터페이스 계약.
공공 슬롯 : slotPlay의 무효 (); slotPause의 무효 (); slotStop의 무효 (); slotReset의 무효 (); 개인 슬롯 : slotTick의 무효 (); 신호 : long ) ; signalTicks 무효 (길이);
아날로그와 반대로 스톱워치 클래스는 신호 MyDisplay 클래스를 수신 슬롯을 구현하고, 대중의 슬롯에 정보를 보내는 신호를 선언합니다.
그것은 또한 카운터를 증가 (우리 친구들이 lerdinhos 비스타를 따를 수 있도록!) 매 10 밀리초를 발사한다 QTime을 구현합니다. 이 카운터는 표시 형식과 디스플레이로 전송됩니다.
타이머가 중지 수 있으며, 일시 중지하고 적절한 버튼을 클릭하여 언제든지 다시 시작.
Finalmentes
예제 자체는 많은 코드가 아니지만, 그것은 타이머 및 맞춤형 신호와 슬롯 건설의 가장 기본적인 사용을 보여줍니다. 아주 특별한주의가 그러나, 이러한 리소스의 사용을 포함 자세한 내용은 부여해야, 그들은 치명적인 함정이 될 수 있습니다.

