1.QWidget基本概念
- QWidget 類是所有窗口類的父類 (控件類是也屬于窗口類),
- QWidget 類的父類的 QObject, 也就意味著所有的窗口類對象只要指定了父對象, 都可以實現(xiàn)內(nèi)存資源的自動回收.
- 可以內(nèi)嵌到其他窗口的內(nèi)部,沒有邊框,需要指定父類窗口
- 可以作為獨立的窗口顯示,有邊框,不需要指定父類窗口。
2.常用接口?
2.1設(shè)置父對象
// 構(gòu)造函數(shù)
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
// 公共成員函數(shù)
// 給當(dāng)前窗口設(shè)置父對象
void QWidget::setParent(QWidget *parent);
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);
// 獲取當(dāng)前窗口的父對象, 沒有父對象返回 nullptr
QWidget *QWidget::parentWidget() const;
。
2.2窗口位置
//------------- 窗口位置 -------------
// 得到相對于當(dāng)前窗口父窗口的幾何信息, 邊框也被計算在內(nèi),標題欄和工具欄都屬于邊框
QRect QWidget::frameGeometry() const;
// 得到相對于當(dāng)前窗口父窗口的幾何信息, 不包括邊框
const QRect &geometry() const;
// 設(shè)置當(dāng)前窗口的幾何信息(位置和尺寸信息), 不包括邊框
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);
// 移動窗口, 重新設(shè)置窗口的位置
void move(int x, int y);
void move(const QPoint &);
frameGeometry和geometry 獲取的位置信息存儲在 QRect中,QRect是是一個矩形類型。
QRect中常用的接口:
// 構(gòu)造函數(shù)
// 構(gòu)造一個空對象
QRect::QRect();
// 基于左上角坐標, 和右下角坐標構(gòu)造一個矩形對象
QRect::QRect(const QPoint &topLeft, const QPoint &bottomRight);
// 基于左上角坐標, 和 寬度, 高度構(gòu)造一個矩形對象
QRect::QRect(const QPoint &topLeft, const QSize &size);
// 通過 左上角坐標(x, y), 和 矩形尺寸(width, height) 構(gòu)造一個矩形對象
QRect::QRect(int x, int y, int width, int height);
//返回矩形左邊緣的左標
int x() const
//返回矩形上邊緣的坐標
int y() const
//返回矩形的寬度
int width() const
//返回矩形的高度
int height() const
3.3qt中的坐標體系
?3.4窗口的相對坐標
- 在一個 Qt 窗口中一般都有很多子窗口內(nèi)嵌到這個父窗口中,其中每個窗口都有自己的坐標原點,子窗口的位置也就是其使用的坐標點就是它的父窗口坐標體系中的坐標點。
- 每個窗口都有坐標原點;
- 窗口的位置是基于父窗口的坐標體系來確定的,也就是說通過父窗口左上角的坐標點來確定自己的位置。
- Qt 中窗口顯示的時候使用的相對坐標,相對于自己的父窗口
- ?B點的坐標相對于A點,即A點坐標為(0,0)
- C點的坐標相對于B點,即B點坐標為(0,0)
3.5 窗口尺寸
//獲取窗口的大小
QSize size() const
// 重新設(shè)置窗口的尺寸信息
void resize(int w, int h);
void resize(const QSize &);
QSize是一個描述窗口大小的類型,包括長度和高度
// 構(gòu)造函數(shù)
// 構(gòu)造空對象, 對象中的寬和高都是無效的
QSize::QSize();
// 使用寬和高構(gòu)造一個有效對象
QSize::QSize(int width, int height);
3.6 窗口標題
//------------- 窗口圖標 -------------
// 得到當(dāng)前窗口的圖標
QIcon windowIcon() const;
// 構(gòu)造圖標對象, 參數(shù)為圖片的路徑
QIcon::QIcon(const QString &fileName);
// 設(shè)置當(dāng)前窗口的圖標
void setWindowIcon(const QIcon &icon);
//------------- 窗口標題 -------------
// 得到當(dāng)前窗口的標題
QString windowTitle() const;
// 設(shè)置當(dāng)前窗口的標題
void setWindowTitle(const QString &);
3.7 窗口信號
// QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy);
// 窗口的右鍵菜單策略 contextMenuPolicy()
// 參數(shù)設(shè)置為 Qt::CustomContextMenu, 按下鼠標右鍵發(fā)射該信號
[signal] void QWidget::customContextMenuRequested(const QPoint &pos);
// 窗口圖標發(fā)生變化, 發(fā)射此信號
[signal] void QWidget::windowIconChanged(const QIcon &icon);
// 窗口標題發(fā)生變化, 發(fā)射此信號
[signal] void QWidget::windowTitleChanged(const QString &title);
3.8 槽函數(shù)
// 關(guān)閉當(dāng)前窗口
[slot] bool QWidget::close();
// 隱藏當(dāng)前窗口
[slot] void QWidget::hide();
// 顯示當(dāng)前創(chuàng)建以及其子窗口
[slot] void QWidget::show();
//------------- 窗口狀態(tài) -------------
// 判斷窗口是否可用
bool QWidget::isEnabled() const; // 非槽函數(shù)
// 設(shè)置窗口是否可用, 不可用窗口無法接收和處理窗口事件
// 參數(shù)true->可用, false->不可用
[slot] void QWidget::setEnabled(bool);
實戰(zhàn)
基于窗口菜單實現(xiàn)策略:
在窗口點擊鼠標右鍵就能生成一個菜單出來。如下
文章來源:http://www.zghlxwxcb.cn/news/detail-538166.html
實現(xiàn)右鍵菜單窗口需要使用到如下這個函數(shù):文章來源地址http://www.zghlxwxcb.cn/news/detail-538166.html
// 函數(shù)原型:
void QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy);
參數(shù):
- Qt::NoContextMenu --> 不能實現(xiàn)右鍵菜單
- Qt::PreventContextMenu --> 不能實現(xiàn)右鍵菜單
- Qt::DefaultContextMenu --> 基于事件處理器函數(shù) QWidget::contextMenuEvent() 實現(xiàn)
- Qt::ActionsContextMenu --> 添加到當(dāng)前窗口中所有 QAction 都會作為右鍵菜單項顯示出來
- Qt::CustomContextMenu --> 基于 QWidget::customContextMenuRequested() 信號實現(xiàn)
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<qwidget.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
resize(600,600);
ui->setupUi(this);
//設(shè)置窗口菜單策略
//在窗口右鍵點擊,發(fā)出一個customContextMenuRequested信號
setContextMenuPolicy(Qt::CustomContextMenu);
connect(this,&QWidget::customContextMenuRequested,this,[=](){
QMenu menu;
//添加菜單
menu.addAction("c++");
menu.addAction("java");
menu.addAction("python");
//啟動菜單欄
//QCursor::pos() 獲取到鼠標點擊的全局位置(屏幕的最左上方的坐標是(0,0)
menu.exec(QCursor::pos());
});
}
到了這里,關(guān)于【QT】——QWidget窗口類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!