QT学习:位置函数
Qt提供了很多關于獲取窗體位置及顯示區域大小的函數,如x()、y()和pos()、rect()、size()、geometry()等,統稱為“位置相關函數”或“位置函數”。幾種主要位置函數及其之間的區別如下:
(1) x()、y()和pos()函數的作用都是獲得整個窗體左上角的坐標位置。
(2) frameGeometry()函數與geometry()函數相對應,frameGeometry()函數獲得的是整個窗體的左上項點和長、寬值,而geometry()函數獲得的是窗體內中央區域的左上頂點坐標及長、寬值。
(3) 直接調用width()和height()函數獲得的是中央區域的長、寬值。
(4) rect()、size()函數獲得的結果也都是對于窗體的中央區域而言的。size()函數獲得的是窗體中央區域的長、寬值。rect()函數與geometry()函數相同,返回一個QRect 對象,這兩個函數獲得的長、寬值是相同的,都是窗體中央區域的長、寬值,只是左上頂點的坐標值不一樣。geometry()函數獲得的左上頂點坐標是相對于父窗體而言的坐標,而rect()函數獲得的左上頂點坐標始終為(0,0)。
以下通過代碼來了解這幾個函數的具體應用。
頭文件為:
cpp文件為:
#include "geometry.h"Geometry::Geometry(QWidget *parent): QDialog(parent) {setWindowTitle(tr("Geometry"));xLabel =new QLabel(tr("x():"));xValueLabel =new QLabel;yLabel =new QLabel(tr("y():"));yValueLabel =new QLabel;FrmLabel =new QLabel(tr("Frame:"));FrmValueLabel =new QLabel;posLabel =new QLabel(tr("pos():"));posValueLabel =new QLabel;geoLabel =new QLabel(tr("geometry():"));geoValueLabel =new QLabel;widthLabel =new QLabel(tr("width():"));widthValueLabel =new QLabel;heightLabel =new QLabel(tr("height():"));heightValueLabel =new QLabel;rectLabel =new QLabel(tr("rect():"));rectValueLabel =new QLabel;sizeLabel =new QLabel(tr("size():"));sizeValueLabel =new QLabel;mainLayout =new QGridLayout(this);mainLayout->addWidget(xLabel,0,0);mainLayout->addWidget(xValueLabel,0,1);mainLayout->addWidget(yLabel,1,0);mainLayout->addWidget(yValueLabel,1,1);mainLayout->addWidget(posLabel,2,0);mainLayout->addWidget(posValueLabel,2,1);mainLayout->addWidget(FrmLabel,3,0);mainLayout->addWidget(FrmValueLabel,3,1);mainLayout->addWidget(geoLabel,4,0);mainLayout->addWidget(geoValueLabel,4,1);mainLayout->addWidget(widthLabel,5,0);mainLayout->addWidget(widthValueLabel,5,1);mainLayout->addWidget(heightLabel,6,0);mainLayout->addWidget(heightValueLabel,6,1);mainLayout->addWidget(rectLabel,7,0);mainLayout->addWidget(rectValueLabel,7,1);mainLayout->addWidget(sizeLabel,8,0);mainLayout->addWidget(sizeValueLabel,8,1);updateLabel(); }void Geometry::updateLabel() {QString xStr; //獲得x()函數的結果并顯示xValueLabel->setText(xStr.setNum(x()));QString yStr; //獲得y()函數的結果并顯示yValueLabel->setText(yStr.setNum(y()));QString frameStr; //獲得frameGeometry()函數的結果并顯示QString tempStr1,tempStr2,tempStr3,tempStr4;frameStr = tempStr1.setNum(frameGeometry().x())+","+tempStr2.setNum(frameGeometry().y())+","+tempStr3.setNum(frameGeometry().width())+","+tempStr4.setNum(frameGeometry().height());FrmValueLabel->setText(frameStr);QString positionStr; //獲得pos()函數的結果并顯示QString tempStr11,tempStr12;positionStr =tempStr11.setNum(pos().x())+","+tempStr12.setNum(pos().y());posValueLabel->setText(positionStr);QString geoStr; //獲得geometry()函數的結果并顯示QString tempStr21,tempStr22,tempStr23,tempStr24;geoStr =tempStr21.setNum(geometry().x())+","+tempStr22.setNum(geometry().y())+","+tempStr23.setNum(geometry().width())+","+tempStr24.setNum(geometry().height());geoValueLabel->setText(geoStr);QString wStr,hStr; //獲得width()、height()函數的結果并顯示widthValueLabel->setText(wStr.setNum(width()));heightValueLabel->setText(hStr.setNum(height()));QString rectStr; //獲得rect()函數的結果并顯示QString tempStr31,tempStr32,tempStr33,tempStr34;rectStr =tempStr31.setNum(rect().x())+","+tempStr32.setNum(rect().y())+","+tempStr33.setNum(/*rect().width()*/width())+","+tempStr34.setNum(height()/*rect().height()*/);rectValueLabel->setText(rectStr);QString sizeStr; //獲得size()函數的結果并顯示QString tempStr41,tempStr42;sizeStr =tempStr41.setNum(size().width())+","+tempStr42.setNum(size().height());sizeValueLabel->setText(sizeStr); }void Geometry::moveEvent(QMoveEvent *) {updateLabel(); }void Geometry::resizeEvent(QResizeEvent *) {updateLabel(); }Geometry::~Geometry() {}main函數內容為:
#include "geometry.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Geometry w;w.show();return a.exec(); }運行結果為:
總結
- 上一篇: QT学习:认识QMainWindow
- 下一篇: QT学习:QPainter与QPaint