构造函数
QWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);
其中参数 parent 指向父窗口,如果这个参数为 0,则窗口就成为一个顶级窗口
参数 f 是构造窗口的标志,主要用于控制窗口的类型和外观等,有以下常用值。
- Qt::FramelessWindowHint:没有边框的窗口。
- Qt::WindowStaysOnTopHint:总是最上面的窗口。
- Qt::CustomizeWindowHint:自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏。
- Qt::WindowTitleHint:显示窗口标题栏。
- Qt::WindowSystemMenuHint:显示系统菜单。
- Qt::WindowMinimizeButtonHint:显示最小化按钮。
- Qt::WindowMaximizeButtonHint:显示最大化按钮。
- Qt::WindowMinMaxbuttonHint:显示最小化按钮和最大化按钮。
- Qt::WindowCloseButtonHint:显示关闭按钮。
示例:
ui.widget->setWindowFlags(Qt::FramelessWindowHint);//设置没有边框的窗口
独立窗口
窗口构造的时候如果有 Qt::Window 标志,那么它就是一个独立窗口,否则
就是一个依附于其他独立窗口的窗口部件。顶级窗口一定是独立窗口,但独立窗
口不一定是顶级的,它可以有父窗口,当父窗口被析构时它也会随之被析构。独立窗口一般
有自己的外边框和标题栏,可以有移动、改变大小等操作。
一个窗口是否为独立窗口可用下面的成员函数来判断:
bool isWindow() const; // 判断是否为独立窗口
下面这个函数可以得到窗口部件所在的独立窗口。
QWidget *window() const; // 所得所在的独立窗口
QString windowTitle() const; // 获得窗口标题
void setWindowTitle(const QString &text); // 设置窗口标题为 text
当然,如果窗口本身就是独立窗口,那么得到的就是自己。
而下面这个函数可以得到窗口的父窗口:
QWidget *parentWidget() const; // 得到父窗口
示例:
ui.widget->setWindowTitle(QString::fromLocal8Bit("QWidget窗口"));//设置窗口标题
QWidget *parentWidget = ui.widget->parentWidget();//得到父窗口
几何参数
//几何参数,窗口的大小和位置:包括外边框和内边框
ui.widget->setGeometry(200, 50, 100, 100);//设置客户区几何参数
int x = ui.widget->geometry().x(); //获取几何区的x坐标
int y = ui.widget->geometry().y(); //获取几何区的y坐标
int w = ui.widget->geometry().width(); //获取几何区的w宽
int h = ui.widget->geometry().height(); //获取几何区的h高
//几何参数,外边框大小
int wo = ui.widget->frameSize().width();//大小
int ho = ui.widget->frameSize().height();
int woo = ui.widget->frameGeometry().width();//大小和尺寸
int hoo = ui.widget->frameGeometry().height();
这里虽然没有直接设置外边框几何参数的函数,但客户区几何参数变化之后,外边框的几何参数也会随之变化。设置几何参数可能会使窗口的位置及大小发生变化,这时会发送窗口移动事件 QMoveEvent,如果大小有变化,还会发送窗口改变大小事件 QResizeEvent,事件的处理函数分别是 moveEvent 和 resizeEvent。注意这里的坐标都是相对于父窗口的,因此移动一个窗口并不导致它的所有部件都接收到移动事件。
注意:不要在 moveEvent 或 resizeEvent 两个事件处理函数中设置几何参数,否则将导致无限循环窗口的几何参数也可以由用户的操作改变,这时也会发送相应的事件。为了方便使用,与几何参数相关的成员函数还有以下这些:
int posx = ui.widget->pos().x();//窗口左上角位置
int posy = ui.widget->pos().y();//
int ox = ui.widget->x();//窗口左上角坐标
int oy = ui.widget->y();
int sizew = ui.widget->size().width();//客户区宽度
int sizeh = ui.widget->size().height();
//改变属性用到的成员函数
ui.widget->move(250, 50); //外边框
ui.widget->resize(150, 150); //客户区
可见性与隐藏性
bool a = ui.widget->isVisible();//判断是否可见
bool b = ui.widget->isHidden();//判断是否隐藏
ui.widget->setVisible(true);//设置可见
ui.widget->setHidden(true);//设置隐藏
//窗口最大最小化,全屏
ui.widget->showMinimized();//最小化--槽函数
ui.widget->showMaximized();//最大化
ui.widget->showFullScreen();//全屏
设置字体
ui.widget->setFont(QFont("yahei", 50, 50));
鼠标事件
//鼠标事件
virtual void mousePressEvent(QMouseEvent *event); // 鼠标键按下
virtual void mouseReleaseEvent(QMouseEvent *event); // 鼠标键松开
virtual void mouseDoubleCllckEvent(QMouseEvent *event); // 鼠标键双击
virtual void mouseMoveEvent(QMouseEvent *event); // 鼠标移动
virtual void enterEvent(QEvent *event); // 鼠标进入窗口
virtual void leaveEvent(QEvent *event); // 鼠标离开窗口
virtual void wheelEvent(QWheelEvent *event); // 鼠标滚轮移动
这里通过 QMouseEvent 事件的成员函数可获得关于鼠标的信息,如:
const QPoint &pos() const; // 得到鼠标坐标(相对于接收事件的窗口)
int x() const; // 得到鼠标横坐标(相对于接收事件的窗口)
int y() const; // 得到鼠标纵坐标(相对于接收事件的窗口)
const QPoint &globalPos() const; // 得到鼠标坐标(全局坐标)
int globalX() const; // 得到鼠标横坐标 (全局坐标)
int globalY() const; // 得到鼠标纵坐标 (全局坐标)
Qt::MouseButton button() const; // 得到引起事件的鼠标键
Qt::MouseButtons buttons() const; // 得到事件发生时的鼠标键状态