目录
QWidget的相关API函数
设置父对象
窗口位置
窗口尺寸
窗口标题和图标
信号
槽函数
示例1(设置窗口大小):
示例2(移动窗口,修改窗口,获取窗口位置信息):
示例3 (修改窗口标题和图标,右键生成菜单项)
QWidget是Qt中的一个基类,它是所有用户界面组件的基础类。QWidget可以被认为是应用程序中所有用户界面组件的“容器”,其实例可以作为窗口或对话框的主窗口,也可以作为主窗口中的一个部件或子窗口。QWidget提供了一些基本的绘制和事件处理方法,以及控制组件的大小、位置和特性等方法,使得可以通过继承QWidget类来自定义各种用户界面组件。
QWidget的相关API函数
设置父对象
// 构造函数
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
// 公共成员函数
// 给当前窗口设置父对象
void QWidget::setParent(QWidget *parent);
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);
// 获取当前窗口的父对象, 没有父对象返回 nullptr
QWidget *QWidget::parentWidget() const;
窗口位置
//------------- 窗口位置 -------------
// 得到相对于当前窗口父窗口的几何信息, 边框也被计算在内
QRect QWidget::frameGeometry() const;
// 得到相对于当前窗口父窗口的几何信息, 不包括边框
const QRect &geometry() const;
// 设置当前窗口的几何信息(位置和尺寸信息), 不包括边框
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);
// 移动窗口, 重新设置窗口的位置
void move(int x, int y);
void move(const QPoint &);
窗口尺寸
//------------- 窗口尺寸 -------------
// 获取当前窗口的尺寸信息
QSize size() const
// 重新设置窗口的尺寸信息
void resize(int w, int h);
void resize(const QSize &);
// 获取当前窗口的最大尺寸信息
QSize maximumSize() const;
// 获取当前窗口的最小尺寸信息
QSize minimumSize() const;
// 设置当前窗口固定的尺寸信息
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);
// 设置当前窗口的最大尺寸信息
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);
// 设置当前窗口的最小尺寸信息
void setMinimumSize(const QSize &);
void setMinimumSize(int minw, int minh);
// 获取当前窗口的高度
int height() const;
// 获取当前窗口的最小高度
int minimumHeight() const;
// 获取当前窗口的最大高度
int maximumHeight() const;
// 给窗口设置固定的高度
void QWidget::setFixedHeight(int h);
// 给窗口设置最大高度
void setMaximumHeight(int maxh);
// 给窗口设置最小高度
void setMinimumHeight(int minh);
// 获取当前窗口的宽度
int width() const;
// 获取当前窗口的最小宽度
int minimumWidth() const;
// 获取当前窗口的最大宽度
int maximumWidth() const;
// 给窗口设置固定宽度
void QWidget::setFixedWidth(int w);
// 给窗口设置最大宽度
void setMaximumWidth(int maxw);
// 给窗口设置最小宽度
void setMinimumWidth(int minw);
窗口标题和图标
//------------- 窗口图标 -------------
// 得到当前窗口的图标
QIcon windowIcon() const;
// 构造图标对象, 参数为图片的路径
QIcon::QIcon(const QString &fileName);
// 设置当前窗口的图标
void setWindowIcon(const QIcon &icon);
//------------- 窗口标题 -------------
// 得到当前窗口的标题
QString windowTitle() const;
// 设置当前窗口的标题
void setWindowTitle(const QString &);
信号
// QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy);
// 窗口的右键菜单策略 contextMenuPolicy() 参数设置为 Qt::CustomContextMenu, 按下鼠标右键发射该信号
[signal] void QWidget::customContextMenuRequested(const QPoint &pos);
// 窗口图标发生变化, 发射此信号
[signal] void QWidget::windowIconChanged(const QIcon &icon);
// 窗口标题发生变化, 发射此信号
[signal] void QWidget::windowTitleChanged(const QString &title);
槽函数
//------------- 窗口显示 -------------
// 关闭当前窗口
[slot] bool QWidget::close();
// 隐藏当前窗口
[slot] void QWidget::hide();
// 显示当前创建以及其子窗口
[slot] void QWidget::show();
// 全屏显示当前窗口, 只对windows有效
[slot] void QWidget::showFullScreen();
// 窗口最大化显示, 只对windows有效
[slot] void QWidget::showMaximized();
// 窗口最小化显示, 只对windows有效
[slot] void QWidget::showMinimized();
// 将窗口回复为最大化/最小化之前的状态, 只对windows有效
[slot] void QWidget::showNormal();
//------------- 窗口状态 -------------
// 判断窗口是否可用
bool QWidget::isEnabled() const; // 非槽函数
// 设置窗口是否可用, 不可用窗口无法接收和处理窗口事件
// 参数true->可用, false->不可用
[slot] void QWidget::setEnabled(bool);
// 设置窗口是否可用, 不可用窗口无法接收和处理窗口事件
// 参数true->不可用, false->可用
[slot] void QWidget::setDisabled(bool disable);
// 设置窗口是否可见, 参数为true->可见, false->不可见
[slot] virtual void QWidget::setVisible(bool visible);
示例1(设置窗口大小):
设置一个窗口,最大尺寸为600*600,最小尺寸为300*300,窗口标题为“hello Qt”,窗口图标为D盘下本地文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//设置窗口的最大尺寸
setMaximumSize(600,600);
//设置窗口的最小尺寸
setMinimumSize(300,300);
//设置窗口的固定尺寸
//设置窗口标题
setWindowTitle("hello Qt");
//给显示的窗口设置图标
setWindowIcon(QIcon("D:\\图片\\qt.jpg"));
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:
示例2(移动窗口,修改窗口,获取窗口位置信息):
在ui界面设计三个Button,移动窗口:moveBtn ,获取位置信息:postBtn,修改窗口的位置和尺寸信息:geometryBtn
在mainwindow.cpp中编写以下代码:
void MainWindow::on_moveBtn_clicked()
{
QRect rect = this->frameGeometry();
move(rect.topLeft()+QPoint(10,20));
}
void MainWindow::on_postBtn_clicked()
{
QRect rect = this->frameGeometry();
qDebug() <<"左上角: "<<rect.topLeft()
<<"右上角: "<<rect.topRight()
<<"左下角: "<<rect.bottomLeft()
<<"宽度: "<<rect.width()
<<"高度: "<<rect.height();
}
void MainWindow::on_geometryBtn_clicked()
{
int x= 100 + rand() % 500;
int y= 100 + rand() % 500;
int width = this->width()+10;
int height = this->height()+10;
setGeometry(x,y,width,height);
}
运行结果:
点击获取位置信息
点击移动窗口后,再点击获取位置信息(向右移动10px,向下移动20px)
点击“修改窗口的位置和尺寸信息”,则窗口会随机移动,并且高度和宽度增加10px。
示例3 (修改窗口标题和图标,右键生成菜单项)
在ui界面中添加按钮,将其objectName改成modifyBtn
并在mainwindow.cpp中编辑函数
void MainWindow::on_modifyBtn_clicked()
{
setWindowTitle("你好,世界");
setWindowIcon(QIcon("D:\\图片\\超级玛丽奥.jpg"));
}
connect(this,&MainWindow::windowTitleChanged,this,[=](const QString &title)
{
qDebug()<<"新的标题: "<<title;
});
connect(this,&MainWindow::windowIconChanged,this,[=](const QIcon &icon)
{
qDebug()<<"当前窗口图标被修改了... ";
});
运行结果:
点击"修改标题和图标"按钮前
点击"修改标题和图标"按钮后
添加右键点击窗口出现菜单栏功能,在mainwindow.cpp中添加以下代码:
//设置QWidget对象的上下文菜单策略 Qt::CustomContextMenu:启用自定义上下文菜单策略,需要使用contextMenuEvent()函数编写自定义上下文菜单。
setContextMenuPolicy(Qt::CustomContextMenu);
connect(this,&MainWindow::customContextMenuRequested,this,[=](const QPoint &pos)
{
//创建一个菜单对象
QMenu menu;
//添加菜单项
menu.addAction("开始");
menu.addAction("结束");
menu.addAction("退出");
menu.addAction("重新开始");
//menu.exec()显示菜单 QCursor::pos()返回光标位置
menu.exec(QCursor::pos());
});
运行结果:
鼠标右键出现菜单栏
总结:本文介绍了QWidget的相关API函数,并举了几个示例以供参考