一、QWidget基础窗口控件
QWidget类是所有用户页面对象的基类,称为基础窗口控件,是一块矩形的页面可视区域,且它也可以包含其它控件,包含的子控件会在该区域中显示并覆盖,例如创建一个窗口对象w,由于窗口对象默认不会显示,必须要调用show()方法显示窗口:
MainWindow w;
w.show();
常用的QWidget类控件成员函数有以下(使用时需包含#include < QWidget >头文件): 1、void QWidget::setGeometry(int x,int y,int w,int h)用于设置窗口的位置和大小; 2、void QWidget::move(int x,int y)用于更改窗口的位置; 3、void QWidget::setWindowTitel(const QString &)用于设置窗口的标题; 4、void QWidget::seWindowState(Qt::WindowStates windowState)用于设置窗口当前的状态,如全屏,最小化等等。 例如设置一个窗口,x偏移为100,y偏移为200,大小为500×300的窗口,窗口的标题为“标题2022-3-3”,在mian.cpp中写代码:
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.setGeometry(100,200,500,300);
w.setWindowTitle("标题2022-3-3");
w.show();
return a.exec();
}
运行结果如下:
二、信号与槽实例
这里通过一个信号与槽的实例来理解信号与槽的相关知识。
例、通过信号与槽实现当用户点击一个按钮控件时,窗口关闭。
首先这里只用到main.cpp源文件,未用到.ui页面,整个程序步骤可以这样理解: 1、首先创建一个QWidget窗口,然后在该窗口上添加一个QPushButton按钮,这里就要通过#include包含这两个类的头文件,如下:
#include <QWidget>
#include <QPushButton>
然后添加一个窗口对象w以及一个按钮对象Button,由于是与用户交互的,要实现当点击按钮窗口关闭这一事件,所以按钮上的文字为“点击按钮关闭”,如下:
QWidget w;
QPushButton Button("点击按钮关闭",&w);
2、设置窗口与按钮的位置和大小,这里都是通过通过QWidget控件成员函数的setGeometry()来设置窗口与按钮的位置和大小,这里简单介绍一下该成员函数的含义: 这里的参数设置如下,可自行设置:
w.setGeometry(100,100,350,250);
Button.setGeometry(10,10,100,40);
3、通过connect()函数实现信号和槽 接下来就是设置信号与槽,槽是对信号做出的响应动作,信号和槽都可以通过函数表示,即信号函数 和槽函数 ,这里简单介绍一下实现信号与槽的函数connect() ,函数connect() 是QObject类中的一个静态成员函数,通过QObject::connect()方式调用,它的参数解释如下: 也就是通过connect()函数将Button按钮的clicked()信号函数与w窗口的close()槽函数关联起来:
QObject::connect(&Button,&QPushButton::clicked,&w,&QWidget::close);
4、完整代码 由于没使用mainwindow.h头文件,所以第一行可以删去,main.cpp的完整代码如下:
#include <QApplication>
#include <QWidget>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
QPushButton Button("点击按钮关闭",&w);
w.setGeometry(100,100,350,250);
Button.setGeometry(10,10,100,40);
QObject::connect(&Button,&QPushButton::clicked,&w,&QWidget::close);
w.show();
return a.exec();
}
4、执行代码,观察结果 点击左下角的绿色三角,执行代码,如下: 可看到出现的窗口位于屏幕的位置如代码中设置: 当鼠标点击按钮,窗口关闭: 达到实现要求!
三、信号与槽的补充知识
1、一个connect()函数只能关联一个信号函数和一个槽函数,程序中可包含多个connect()函数,从而实现以下操作: 另外还可以通过connect()函数中的method参数实现信号之间的关联,从而一次发出多个信号。 2、并不是所有的控件之间都可以通过信号与槽关联起来,控件类要直接或间接继承自QObject类,且控件类必须包含private属性的Q_OBJECT宏。
|