当前位置: 首页 > Web前端 > CSS

QT新手笔记01

时间:2023-03-30 17:52:19 CSS

QT自定义控件方法:第一步创建QTProject,基类为QWidget(查ui);第二步是在.ui界面中创建需要的控件;第三步,在这个Project中点击Project名称添加一个新文件,添加一个继承QWidget的C++类;第四步,在这个.ui里面拖一个Widget控件,然后选择Widget,右键升级,输入第一个类名;第五步,关联第一个类Connect中的控件。示例:horizo??ntalSlider和spinboxapi(fragment):setRange(0,100)connect(ui->horizo??ntalSlider,&QSlider::valueChanged,[=](intvalue){ui->spinBox->setValue(value);connect(ui->spinBox,static_cast(&QSpinBox::valueChanged),ui->horizo??ntalSlider,&QSlider::setValue;扩展:设置两个PushButtons,一个可以获取horizo??ntalSlider的值,另一个可以设置horizo??ntalSlider的值注意:第一个创建的自定义Widget中给出了2个函数,intget_value()----第一个PushButton和voidset_value(intvalue)---第二个PushButton,最后通过按钮的槽函数常用事件处理方法:在所有组件的父类QWidget中,定义了很多事件处理函数,如():鼠标双击事件?mouseMoveEvent():鼠标移动事件?mousePressEvent():鼠标按键p新闻事件项目?mouseReleaseEvent():鼠标按键释放事件?等。这些函数是protectedvirtual,也就是说我们可以在子类中重新实现这些函数。例子:第一步创建一个QTProject,基类是QWidget(查ui);第二步,在.ui中拖一个Label控件;第三步,在这个Project中点击Project名称添加一个新文件,添加一个C++类,继承QLabel;第四步,将窗口的Label控件提升到第三步创建的类中;第五步,重写新类中方法中的虚函数。api(fragment):headerfile#include//设置开头有鼠标跟踪setMouseTracking(true)voidmousePressEvent(QMouseEvent*e):e->x;e->y;intbutton=e->按钮();如果(按钮==Qt::LeftButton);..button==Qt::RightButton;..button==Qt::RightButton;..//Label支持html写法QStringstr=QString("

pressed[%1,%2]

").arg(x).arg(y);this->setText(str);voidmouseMoveEvent(QMouseEvent*e):其他同上,添加如下intbutton=e->buttons();..if(buttons&Qt::LeftButton)..if(buttons&Qt::RightButton)..if(buttons&Qt::MidButton)3.Eventdistributor(事件分发函数)函数:Distribute各种事件事件处理函数。方法:第一步创建一个QTProject,基类为QWidget(查ui);第二步,在.ui中拖一个Label控件;第三步,在这个Project中点击Project名称添加一个新的。文件,添加一个C++类,继承QLab埃尔;第四步,将窗口的Label控件提升到第三步创建的类;第五步,重写新类中的事件分发函数。api://事件分发函数boolmyLabel::event(QEvent*e){//如果返回值为true,表示事件处理完毕//如果返回值为false,表示事件处理完毕未被处理例如:if(e->type()==QEvent::MouseMove){returntrue;}//让其他事件通过returnQLabel::event(e);}4.事件过滤函数:1.在事件到达窗口之前,需要经过事件过滤器和事件派发器不同的地方:如果窗口中有多个标签,那么Clickmultiplelabels。此时多个标签都可以接收到鼠标点击事件。如果要拦截鼠标点击事件,可以从事件过滤器中统一拦截;2.事件过滤器是object对象或子类Object;3、需要安装事件过滤器;4.重写object对象或子类对象中的事件过滤函数。方法一:第一步创建QTProject,基类为QWidget(查ui);第二步,在.ui中拖一个Label控件;第三步,在这个Project中点击Project名称添加一个新文件,添加一个C++类,继承QLabel;第四步,将窗口的Label控件提升到第三步创建的类中;第五步在这个新建的类中重写事件过滤函数。api://rewriteeventfilterfunctionboolmyLabel::eventFilter(QObject*watched,QEvent*event){//返回值为true,表示事件被拦截,不会到达窗口//返回值为false,说明事件没有被拦截if(event->type()==QEvent::MouseButtonPress){returntrue;}returnfalse;}Finally://在新建的Label类构造函数中,安装事件过滤器this->安装事件过滤器(这个);方法二:第一步创建一个QTProject,基类为QWidget(查ui);第二步,在.ui控件中拖一个Label;第三步是在这个项目中在ect中点击Projectname,添加一个新文件,添加一个C++类,继承QLabel;第四步将窗口的Label控件提升为第三步创建的类;第五步创建另一个类,继承Object;第六步在这个类中重写了事件过滤函数;api:#include//事件过滤器的头文件boolmyEvent::eventFilter(QObject*watched,QEvent*event){//返回值为true,表示事件被拦截,不会到达窗口//返回值为false,说明事件没有被拦截if(event->type()==QEvent::MouseButtonPress){//returntrue;}returnfalse;}最后://安装事件过滤器,在新创建的类中继承LabelmyEvent*filter=newMyEvent(this);this->installEventFilter(filter);