Qt close hide reject 등
이 함수들은 두 종류로 나뉘는데, 하나는 대상을 삭제하는 데 쓰이고, 하나는 창을 숨기는 데 쓰인다.
0
QObject::deleteLater()
delete obj;분석 대상
1
QWidget::setVisible(bool)
Widget 표시 또는 비표시
2
QWidget::setHidden(bool)
1번 조끼
3
QWidget::show()
1번 조끼
4
QWidget::hide()
1번 조끼
5
QWidget::close()
상황을 보고 4번 0번 호출 여부를 확정하다
6
QDialog::done(int)
항상 4번, 상황에 따라 0번 호출
7
QDialog::accept()
6번 조끼
8
QDialog::reject()
6번 조끼
앞에 쓰다
우리는 알고 있지만,
참고:
본고의 다음 토론은 모두 당신이 사용한 new로 만든 대상을 가정한 것입니다.
QObject
Qt류의 선조부터 시작하자.QObject는 인터페이스와 관련이 없기 때문에 구성원 중에는 분석 문제만 관련된다.Qt의 delete에서 말하자면 우리는
obj->deleteLater();
마지막으로 호출된 것은 다음과 같습니다.
delete obj;
간단하네.그래서 이 함수에 대한 이야기(약)
또한: 대상을 분석할 때destroyed 신호를 발사한다.주의해라, 대상을 분석할 때, 이것은 쓸데없는 말이지만, 기억해야 한다.
QWidget
setVisible
허허, show(), hide(), setVisible(), setHidden() 등 네 가지 함수는 눈이 어지럽게 보인다.어떡하죠?
코드를 보십시오:
virtual void setVisible(bool visible);
inline void setHidden(bool hidden) { setVisible(!hidden); }
inline void show() { setVisible(true); }
inline void hide() { setVisible(false); }
코드가 명확하다: 이 네 가지 중 setVisible만 독립적이고 다른 세 가지는 모두 그의 조끼이다!
setVisible의 역할은 무엇입니까?말 그대로 Widget이 표시되거나 표시되지 않습니다.
요점: 보이지 않습니다. Widget이 인터페이스에 나타나지 않지만 대상이 분석되는 것은 아닙니다!
close
이 함수는 Manual에서 준 것이 사실 매우 상세하고 투철하다.처음엔 알아내기 힘들었어.
우선, 우리가close를 직접 호출할 때 (또는 닫기 단추를 누르면) QClose 이벤트를 생성합니다. (우리는 그것을 받아들이거나 막을 수 있습니다. 만약 우리가 이벤트를 막으면,close는 바로 되돌아와서 아무것도 하지 않습니다.)
관전 포인트 원본:
bool QWidgetPrivate::close_helper(CloseMode mode)
{
...
QCloseEvent e;
if (mode == CloseWithSpontaneousEvent)
QApplication::sendSpontaneousEvent(q, &e);
else
QApplication::sendEvent(q, &e);
if (!that.isNull() && !e.isAccepted()) {
data.is_closing = 0;
return false;
}
...
}
그 다음: 만약에 우리가 이벤트(기본값)를 받아들였다면 그녀는 우리가 앞서 언급한 친구를 직접 호출했을 것이다.(인터페이스에서 제거)
q->hide();
다시: 만약 우리가 그것을 위해 표시 위치를 설정했다면 (닫을 때 삭제): 옛 친구를 또 보지 않았습니까?(메모리에서 제거)
if (q->testAttribute(Qt::WA_DeleteOnClose)) {
q->setAttribute(Qt::WA_DeleteOnClose, false);
q->deleteLater();
}
문제 외:close는 다른 코드이지만 본 주제와 상관없이 더 이상 언급하지 않습니다.
QDialog
QDialog는 QWidget에 비해 Done, Reject, accept 등 3개의 관련 함수가 더 많습니다.
먼저 두 개의 조끼를 보자.
void QDialog::accept()
{
done(Accepted);
}
void QDialog::reject()
{
done(Rejected);
}
done
done가 하는 일은 close와 유사합니다: 왜냐하면 close가 호출하는close 를 호출했기 때문입니다helper 함수.close 함수와는 다르기 때문에 Widget을 항상 보이지 않게 합니다.그리고close 조작, 마지막으로 매개 변수에 따라 신호 발사
void QDialog::done(int r)
{
Q_D(QDialog);
hide();
setResult(r);
d->close_helper(QWidgetPrivate::CloseNoEvent);
emit finished(r);
if (r == Accepted)
emit accepted();
else if (r == Rejected)
emit rejected();
}
주의: QDilaog에는 이벤트 순환이 포함될 수 있습니다. 이벤트 순환은 QDialog::exec () 에서 시작하고, QDialog::setVisible (false) 는 이벤트 순환을 종료합니다. 여기에는 마갑hide () 를 사용합니다.
참고 자료
출처:http://blog.csdn.net/dbzhang800/article/details/6300021
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.