merlinzjl

导航

day01 QT学习 信号槽和QWidget介绍

一、信号槽

类似windows的消息机制,但是不像windows那样需要指定接受消息的对象。

信号函数,只发送不需要知道接收者。

槽函数,只管接收不管是谁发送的。

通过QObject来绑定。

 

原理:绑定信号函数和槽函数,调用信号函数时实质是将信号写入队列中,主线程从队列中获取信号。注意,很多内部槽函数不能在外部线程调用。

QApplication a(argv,argc);

a.exec();//主线程循环遍历。

 

添加信号槽的方法

第一种

 

第二种

 

第三种,手动添加一个信号槽

所有添加了信号槽函数的类必须添加一个Q_OBJECT说明。QT会使用moc程序通过判断是否存在Q_OBJECT来控制是否自动生成代码。

手动创建信号signals,只需要声明,无需定义。

手动创建槽public slots,需要定义。

/*信号调用者对象地址,信号,接收地址,槽函数*/

QObject::connect(ui.tests, SIGNAL(clicked()), this, SLOT(testSlot()));

QObject::disconnect(ui.tests, SIGNAL(clicked()), this, SLOT(testSlot()));

QObject::connect(&x, SIGNAL(move(int, int, int)), &w, SLOT(Move(int, int)));

注意信号的参数必须大于等于槽函数的参数。

 

定义一个信号

signals:

         void ViewSig();

 

定义一个槽函数

public slots:

         void ViewSlot();

 

 

二、QWidget说明

QWidget类是所有用户界面对象的基类,窗口部件接收鼠标、键盘等事件;同时QWidget会在屏幕上绘制自己。QWidget的父子对象具有相对坐标。

 

手动创建QWidget对象

QWidget w;

w.show();//显示包含子窗口,注意,这个show()是一个槽函数。

w.hide();//隐藏窗口

 

QWidget窗口的坐标和尺寸

得到或者设置坐标和尺寸QRect geometry(); setGeometry(x,y,width,height);

移动到指定坐标和重新定义大小:move,resize

注意获取坐标一定要在w.show()之后调用。

 

窗口类型

//去除标题栏最大最小化按钮等,变为无边框模式,Qt5.9在做3D时开发时,无边框模式下会有阻塞问题

this->setWindowFlags(Qt::FramelessWindowHint);

//去除最大化最小化按钮

this->setWindowFlag(Qt::WindowMinimizeButtonHint, false);

this->setWindowFlag(Qt::WindowMaximizeButtonHint, false);

//标题栏保留,取出所有按钮    this->setWindowFlags(Qt::WindowTitleHint|Qt::CustomizeWindowHint);

//只有关闭按钮

this->setWindowFlags(Qt::WindowCloseButtonHint);

posted on 2019-08-21 23:05  merlinzjl  阅读(1295)  评论(0编辑  收藏  举报