QT 第7篇 Qt 中的座標系統
阿新 • • 發佈:2021-02-07
|
文章目錄
座標系統 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 元件可以在座標系統中進行大小設定
感謝關注,文章持續高速更新中……