두 개의 QLabel을 겹치려고합니다. 하나의 qlabel에는 이미지가 포함되어 있으며, 다른 qlabel에는 내가 말할 때 사각형이 그려집니다. 둘 다 개별적으로 작동하지만 이미지 QLabel 위에 사각형 QLabel을 겹쳐 써야합니다. QMainWindow에는 setCentralWidget에 대한 옵션 하나만 있습니다. 어떻게하면 좋을까요?두 개의 Q 라벨을 겹치는 방법은 무엇입니까? Qt4
1
A
답변
2
두 개의 겹치는 레이블을 원하면 레이아웃에 추가하지 않고 상위 창에 직접 배치하십시오. 이 같은
뭔가 :
// ...
parent = new QWidget();
label1 = new QLabel(parent);
label2 = new QLabel(parent);
label1->setGeometry(QRect(100,100,80,20));
label2->setGeometry(QRect(100,100,80,20));
// ...
1
당신은 레이아웃에 하단 레이블을 추가 할 수 있지만 상단 하나를 (중복) 할 수 있습니다. 상단의 위치를 하단의 위치로 종속시킵니다. 맨 아래 레이블의 경우 QLabel에서 파생 된 클래스를 사용해야합니다. 여기서 resizeEvent(...)
을 재정의하고 신호를 내 보낸 다음 상속 된 QLabel::resizeEvent(...)
을 호출해야합니다. 해당 신호를 QLabel 파생 클래스 인 최상위 레이블의 슬롯에 연결하십시오. 슬롯은 맨 아래 라벨의 수신 된 형상을 조작하여 상단 라벨의 형상을 얻고 this->setGeometry(...)
을 호출합니다. 아래는 SSCCE입니다. 다음과 같이
#overlap.pro
QT += core gui
TARGET = overlap
TEMPLATE = app
SOURCES += main.cpp
//main.cpp
#include <QtGui/QLabel>
#include <QHBoxLayout>
#include <QtGui/QApplication>
class TopLabel : public QLabel
{
Q_OBJECT
public:
TopLabel(QWidget * parent = 0) : QLabel(parent) {}
TopLabel(const QString & text, QWidget * parent = 0) : QLabel(text, parent) {}
public slots:
void bottomGeometry(const QRect & r) {
setGeometry(r.left() + r.width()*0.25, r.top() + r.height()*0.1,
r.width()*0.5, r.height()*0.5);
}
};
class BottomLabel : public QLabel
{
Q_OBJECT
public:
BottomLabel(QWidget * parent = 0) : QLabel(parent) {}
BottomLabel(const QString & text, QWidget * parent = 0) : QLabel(text, parent) {}
signals:
void newGeometry(const QRect & r);
protected:
void resizeEvent(QResizeEvent *) { emit newGeometry(geometry()); }
void moveEvent(QMoveEvent *) { emit newGeometry(geometry()); }
};
class Window : public QWidget
{
public:
Window() {
QLayout * layout = new QHBoxLayout();
QLabel * l = new QLabel("Left", this);
l->setFrameStyle(QFrame::Box | QFrame::Raised);
layout->addWidget(l);
BottomLabel * bl = new BottomLabel("Right", this);
bl->setFrameStyle(QFrame::Box | QFrame::Raised);
TopLabel * tl = new TopLabel("TOP", this);
tl->setFrameStyle(QFrame::StyledPanel);
connect(bl, SIGNAL(newGeometry(QRect)), tl, SLOT(bottomGeometry(QRect)));
layout->addWidget(bl);
setLayout(layout);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Window w;
w.show();
return a.exec();
}
#include "main.moc"
관련 문제
- 1. Qt4 Q 해쉬 해시 충돌?
- 2. Android, 두 개의 겹치는 레이아웃에서 지연되는 ObjectAnimator
- 3. Qt4 QSslSocket 트리거 HTTP 406 응답 q
- 4. 두 객체가 겹치는 패턴
- 5. 보기를 겹치는 방법은 무엇입니까?
- 6. maven을 사용하여 클래스가 겹치는 두 개의 이슈 만들기
- 7. 겹치는 두 이미지에 태그를 사용할 수있는 방법은 무엇입니까?
- 8. QT4 라디 언 버튼을 사용하는 방법은 무엇입니까?
- 9. jQuery에서 객체가 겹치는 여러 개의 mousedown 이벤트를 생성하는 방법은 무엇입니까?
- 10. 테이블 행을 겹치는 방법은 무엇입니까?
- 11. MapView에서 라벨을 제거하는 방법은 무엇입니까?
- 12. 이미지보기에서 라벨을 정렬하는 방법은 무엇입니까?
- 13. THREE.Mesh에 라벨을 추가하는 방법은 무엇입니까?
- 14. 캔버스 위젯에 두 개의 오브젝트가 겹쳐져 있는지 확인하는 방법은 무엇입니까?
- 15. 두 개의 콜렉션을 조작하는 두 개의 스레드를 해결하는 방법은 무엇입니까?
- 16. SQL Server 2008 이상 : 두 개의 다각형이 겹치는 지 감지하는 가장 좋은 방법은 무엇입니까?
- 17. 두 개의 겹치는 버튼으로 동일한 클릭을받을 수 있습니까?
- 18. CUDA Thrust : 두 개의 device_vectors가 겹치는 메모리를 가리킬 수 있습니까?
- 19. 신경망으로 Q-learning을 구현하는 방법은 무엇입니까?
- 20. 빙지도에서 압정에 라벨을 지정하는 방법은 무엇입니까?
- 21. 클릭하면 굵은 글씨로 라벨을 지정하는 방법은 무엇입니까?
- 22. 두 전화기 사이에 Q & A 앱
- 23. trac에서 여러 개의 (겹치는) 프로젝트를 어떻게 처리합니까?
- 24. UriTemplate을 사용하여 이름 하나에 두 개의 값을 설정하는 방법은 무엇입니까?
- 25. 레일스 양식에서 optgroup 라벨을 선택하는 방법은 무엇입니까?
- 26. 재설정하기 전에 비밀번호 라벨을 업데이트하는 방법은 무엇입니까?
- 27. 두 이미지 뷰의 일부분을 겹치는 방법
- 28. 겹치는 사각형을 효율적으로 그룹화
- 29. AndEngine : 두 개의 스프라이트 충돌
- 30. 2 개의 라벨을 서로 어떻게 추가하나요?
또한, 당신이는 QWidget의 인상()와() 낮은 방법을 조사 할 수 있습니다 : http://qt-project.org/ 포럼/viewthread/16285 – mydoghasworms