QT新手笔记01

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了QT新手笔记01脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. QT自定义控件

方法:

  第一步 创建一个QTPRoject,基类为QWidget(勾选ui);
  第二步 在.ui界面中创建所需控件;
  第三步 在这个Project中点击Project名添加新文件, 添加一个C++ class,继承QWidget;
  第四步 在这个的.ui中拖一个Widget控件,然后选择Widget右键提升,输入第一个的类名;
  第五步 关联第一个类中的控件之间的联系.

例子:horizintalSlider and spinbox

api(片段):

 setRange(0,100)
 connect(ui->horizontalSlider,&QSlider::valueChanged,[=](int value){
 ui->spinBox->setValue(value);
 connect(ui->spinBox,
 static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
 ui->horizontalSlider,&QSlider::setValue);

拓展:

set two PushButtons and one can get the value of the horizontalSlider, 
the another one can set the value of the horizontalSlider.

Mind:

在第一个创建的自定义Widget中给出2个函数, int get_value()----the First PushButton和void set_value(int value)---
the second PushButton, 最后通过按钮的槽函数就可以实现了.
  1. 常用事件处理

方法: 在所有组件的父类 QWidget 中,定义了很多事件处理的函数,如
&#x25fc; keyPressEvent():键盘按键按下事件
◼ keyReleaseEvent():键盘按键松开事件
◼ mouseDoubleClickEvent():鼠标双击事件
◼ mouSEMoveEvent():鼠标移动事件
◼ mousePressEvent():鼠标按键按下事件
◼ mouseReleaseEvent() : 鼠标按键松开事件
等等
这些函数都是 protected virtual 的,也就是说,我们可以在子类中重新实
现这些函数。

例子:

  第一步 创建一个QTProject,基类为QWidget(勾选ui);
  第二步 在.ui中拖一个Label的控件;
  第三步 在这个Project中点击Project名添加新文件, 添加一个C++ class,继承QLabel;
  第四步 把窗口的Label控件提升为第三步创建的类;
  第五步 在新建类中重写方法中的虚函数.
  

api(片段):

头文件  #include<QMouseEvent>
//设置一开始就有鼠标跟踪
setMouseTracking(true)
void mousePressEvent(QMouseEvent *e):
e->x;
e->y;
int button=e->button();
if( button==Qt::LeftButton);
.. button==Qt::RightButton;
.. button==Qt::RightButton;
..//Label支持html的写法
QString str=QString("<h1><center>pressed[%1,%2]</center></h1>").
arg(x).arg(y);
this->setText(str);

void mouseMoveEvent(QMouseEvent *e):
其他同上,补充如下
int button=e->buttons();
..if(buttons & Qt::LeftButton)
..if(buttons & Qt::RightButton)
..if(buttons & Qt::MidButton)

3.事件分发器(事件分发函数)
作用: 分发各种事件到事件处理函数中.

方法:

  第一步 创建一个QTProject,基类为QWidget(勾选ui);
  第二步 在.ui中拖一个Label的控件;
  第三步 在这个Project中点击Project名添加新文件, 添加一个C++ class,继承QLabel;
  第四步 把窗口的Label控件提升为第三步创建的类;
  第五步 在新建类中重写事件分发函数.
  

api:

 //事件分发函数
 bool myLabel::event(QEvent *e)
 {
//如果返回值是true, 表示事件被处理了
//如果返回值是false,表示事件没有被处理
比如:if(e->type()==QEvent::MouseMove)
{
    return true;
}
//让其他事件传递下去
return QLabel::event(e);
}

4.事件过滤器
作用:

 1.事件到达窗口之前要经过事件过滤器
 与事件分发器不同的地方: 如果窗口中有多个label,那么点击多个label,这时,多个label都可以接收到鼠标点击事件,
 如果要截取鼠标点击事件,那么可以从事件过滤器中统一截取;
 2.事情过滤器是一个object的对象或子类的对象;
 3.事件过滤器需要安装;
 4.object的对象或子类对象中重写事件过滤器函数.

方法一:

   第一步 创建一个QTProject,基类为QWidget(勾选ui);
   第二步 在.ui中拖一个Label的控件;
   第三步 在这个Project中点击Project名添加新文件, 添加一个C++ class,继承QLabel;
   第四步 把窗口的Label控件提升为第三步创建的类;
   第五步 在这个新建的类中重写了事件过滤器函数.

api:

//重写事件过滤器函数
bool myLabel::eventFilter(QObject *watched, QEvent *event)
{
//返回值是true,表示该事件受到拦截,不会到达窗口
//返回值是false,表示该事件没有受到拦截
if(event->type()==QEvent::MouseButtonPress)
{
    return true;
}
return false;
}
Finally://新建的Label类构造函数中,安装事件过滤器
       this->installEventFilter(this);

方法二:

   第一步 创建一个QTProject,基类为QWidget(勾选ui);
   第二步 在.ui中拖一个Label的控件;
   第三步 在这个Project中点击Project名添加新文件, 添加一个C++ class,继承QLabel;
   第四步 把窗口的Label控件提升为第三步创建的类;
   第五步 再创建一个类,继承Object;
   第六步 在该类中重写了事件过滤器函数;

api:

#include<QEvent>//事件过滤器的头文件
bool myEvent::eventFilter(QObject *watched, QEvent *event)
{
//返回值是true,表示该事件受到拦截,不会到达窗口
//返回值是false,表示该事件没有受到拦截
if(event->type()==QEvent::MouseButtonPress)
{
    //return true;
}
return false;
}
Finally://安装事件过滤器,在新建的继承Label的类中
myEvent *filter=new MyEvent(this);
this->installEventFilter(filter);

脚本宝典总结

以上是脚本宝典为你收集整理的QT新手笔记01全部内容,希望文章能够帮你解决QT新手笔记01所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。