1. 程式人生 > 其它 >QT 第7篇 Qt 中的座標系統

QT 第7篇 Qt 中的座標系統

技術標籤:Qtqtc++

|

文章目錄

座標系統 1

GUI 作業系統都有特定的座標系統
圖形介面程式在座標系中進行視窗和部件的定位
定位型別
	-	頂級視窗部件的定位
	-	視窗內部件的定位
	-	視窗部件的大小設定

座標系統 2

Qt 使用統一的座標系統定位視窗部件的位置和大小
Qt 部件類提供成員函式在座標系統中進行定位
QWidget 類提供了視窗部件所需的座標系統成員函式

QWidget 類中座標系統成員函式

	-	x()    		   // 當前部件的左上角座標座標,和frameGeometry.x()相同
	-	y()				// 當前部件的左上角座標座標,和frameGeometry.y()相同
	-	width()			//  和geometry() .width() 意義相同 
	-	height()		// 和geometry() .heigth() 意義相同
	-	geometry()   		    // 客戶區(不包括標題欄和邊框) 左上角的座標
	-			-	x(),y(),width(),heigth()   // x(),y(),客戶區(不包括標題欄和邊框) 左上角的座標,,,,width(),heigth()  指的是客戶區的長度和高度
	-	frameGeometry  
	-			-	x(),y(),width(),heigth()   // x(),y()左上角座標,width(),heigth()指的是真正視窗的長寬(包括邊框和標題欄)

注意:
為什麼要提供三組不同的座標:
為了跨平臺,因為不同的視窗式樣不同,不同之處體現在邊框和標題欄
所以提供了非常詳細的函式供呼叫,因為圖形以畫素為單位進行定位的

程式設計實驗

Qt 座標系統初探

#include <QtGui/QApplication>
#include <QPushButton>
#include <QDebug>

#include "MainWindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    QPushButton b(&w);   // 生成 QPushButton物件, 其父元件為 QWidget
    QPushButton b1
(&w) w.resize(100, 100); w.move(120, 120); w.show(); qDebug()<<"QWidget:"; qDebug()<<w.x(); qDebug()<<w.y(); qDebug()<<w.width(); qDebug()<<w.height(); qDebug()<<"QWidget::geometry()"; qDebug()<<w.
geometry().x(); qDebug()<<w.geometry().y(); qDebug()<<w.geometry().width(); qDebug()<<w.geometry().height(); qDebug()<<"QWidget::frameGeometry()"; qDebug()<<w.frameGeometry().x(); qDebug()<<w.frameGeometry().y(); qDebug()<<w.frameGeometry().width(); qDebug()<<w.frameGeometry().height(); return a.exec(); }

注意事項:

geometry() 和 frameGeometry() 中的稽核資料必須在 show() 呼叫後才有效
為什麼?
因為Qt的目標是跨平臺,因為在執行之前不知道會在什麼環境下執行,所以Qt在視窗顯示出來之前,無法得到真實有效的幾何資料

視窗部件的大小設定
QWidget 類提供了成員函式
- 改編視窗部件的大小
- void resize( int w, int h )
- void resize( congst QSize& )
- 改編視窗部件的位置
- void move( int x, int y )
- void move( const QPoint& )

程式設計實驗

視窗子元件的大小和位置

#include <QtGui/QApplication>
#include <QPushButton>
#include <QDebug>

#include "MainWindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    QPushButton b(&w);   // 生成 QPushButton物件, 其父元件為 QWidget
    QPushButton b1(&w);


    b.setText("Button"); // 設定顯示的字串
    b.move(10, 10);      // 移動到座標 (10, 10)
    b.resize(100, 50);   // 設定大小 width = 100, height = 25

    b1.setText("Button"); // 設定顯示的字串
    b1.move(120, 10);      // 移動到座標 (120, 10)
    b1.resize(100, 50);   // 設定大小 width = 100, height = 25


    w.resize(100, 100);
    w.move(120, 120);
    w.show();

    qDebug()<<"QWidget:";
    qDebug()<<w.x();
    qDebug()<<w.y();
    qDebug()<<w.width();
    qDebug()<<w.height();

    qDebug()<<"QWidget::geometry()";
    qDebug()<<w.geometry().x();
    qDebug()<<w.geometry().y();
    qDebug()<<w.geometry().width();
    qDebug()<<w.geometry().height();

    qDebug()<<"QWidget::frameGeometry()";
    qDebug()<<w.frameGeometry().x();
    qDebug()<<w.frameGeometry().y();
    qDebug()<<w.frameGeometry().width();
    qDebug()<<w.frameGeometry().height();
    
    return a.exec();
}


// 注意:
// 如果設定的作業系統小於作業系統所滿足的最小寬度時,這時以作業系統對視窗規定的最小寬度來取代我們設定的值
// 進行開發時,有些時候必須注意作業系統的特性

QPushButton 元件

QPushButton 用於接受使用者點選事件
QPushButton 能夠顯示提示性字串
QPushButton 是功能元件,需要父元件作為容器
QPushButton 能夠在父元件中進行定位

QWidget w;			// 生成 QWidget 物件,頂級元件
QPushButton b(&w);  // 生成 QPushButton 物件,其父元件為 QWidget 

b.setText("Button"); // 設定顯示字串
b.move(10, 10);      // 移動到座標 (10, 10)
b.resize(100, 25);   // 設定大小 width = 100, height = 25

總結:

Qt中的幾何座標以左上角為原定
	-	水平為 x 軸,從左到右為正向
	-	垂直為 y 軸, 從上到下為正向
Qt 中的 GUI 元件以左上角進行定位
Qt 中的 GUI 元件可以在座標系統中進行大小設定

感謝關注,文章持續高速更新中……