我想重疊兩個QLabels。一個qlabel包含一個圖像,而另一個qlabel當我告訴它時繪製一個矩形。兩者都單獨工作,但我需要重疊在圖像QLabel頂部的矩形QLabel。在QMainWindow中,我只有一個選項:setCentralWidget。我將如何做到這一點?如何重疊兩個QLabels? 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. 如何重疊兩個div
- 2. 兩個UIViews重疊
- 3. 兩個JPanels重疊?
- 4. 兩個div重疊,如何解決?
- 5. 如何使兩個div完全重疊
- 6. 如何重疊兩個控件
- 7. 如何檢測兩個UIImageView重疊?
- 8. 兩個容器重疊
- 9. 重疊兩個網格
- 10. DeqeueReusableCellWithIdentifier重疊兩個小區
- 11. 防止兩個div重疊?
- 12. 的兩個按鈕重疊
- 13. 如何疊加兩個geom_bar?
- 14. 如何疊加兩個GwtCanvas?
- 15. 如何重疊多個div?
- 16. 如何讓一個div與另外兩個div重疊?
- 17. 如果兩個表有重疊列,則會得到重疊記錄
- 18. 在Qt4中顯示兩個窗口
- 19. 如何避免重疊(重疊)標籤?
- 20. 如何解決這兩個頁面重疊?
- 21. 如何阻止兩個ggplot圖例重疊?
- 22. 如何重疊兩個div與透明度
- 23. 如何計算兩個旋轉矩形的重疊比例?
- 24. 如何讓iPhone中的兩個導航欄重疊?
- 25. 如何防止兩個盒子元素重疊?
- 26. 如何排列兩個表格而不使其內容重疊?
- 27. 如何完美重疊兩個(相同)元素?
- 28. 我如何檢測兩個CALayers是否重疊?
- 29. 的winform如何避免出現兩個面板對接,重疊
- 30. 如何避免兩個linearLayout在Android中相互重疊?
此外,你可能要考慮加薪()下()方法,在QWidget中,如下所示:http://qt-project.org/論壇/ viewthread/16285 – mydoghasworms