QT(多线程初步,自定义信号)

1.QT多线程

包含头文件$include <QThread>

通过继承QThread类

class myPthread:QPthread{};

重写虚函数run();

调用start();

myThread *t=new myThread(socket);
t->start();

在线程类的run函数中使用信号与槽的方式,再实现槽函数

2.自定义信号

头文件中定义信号的关键字:"signals:"

signals:
    void sendarr(QByteArray ba);

触发信号的方式

emit sendarr(arr);

槽函数

slots:
    void getarr(QByteArray arr);

3.scrollArea(滚动区域)

当用ui界面拖入一个滚动区域时,QT会自动为我们创建一个幕布,我们所有的子组件都会被显示在这个幕布上

当我们需要向滚动区域添加多个子组件时

首先,创建一个布局

QGridLayout *pLayout = new QGridLayout();//网格布局

再在布局中添加自己的组件

    for(int i = 0; i < titlevec.size(); i++)
    {
        myLabel *label = new myLabel();
        label->setText(titlevec.at(i));

        // 假设我们想要每个标签的宽度为滚动区域宽度减去 20,高度为 30
        int labelWidth = ui->scrollArea->width() - 15; // 考虑滚动区域的框架和边距
        int labelHeight = 30;

        // 设置标签的最小和最大尺寸为固定值
        label->setMinimumSize(QSize(labelWidth, labelHeight));
        label->setMaximumSize(QSize(labelWidth, labelHeight));
        label ->setAlignment(Qt::AlignVCenter);//垂直居中

        pLayout->addWidget(label);//将组件添加到布局中
    }

最后将布局设为滚动区域的布局

    ui->scrollArea->widget()->setLayout(pLayout);
//把布局放置到QScrollArea的内部QWidget中,widget()用于获取滚动区域的画布

4.鼠标滑入,滑出,点击事件

如果你需要让你的部件实现鼠标滑入,滑出,点击能够产生改变,可以通过继承部件类重写里面的函数实现

例如:

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>


class myLabel:public QLabel//继承QLabel类
{
      Q_OBJECT
public:
    myLabel(QWidget *parent=0);
    void enterEvent(QEnterEvent *event);//重写虚函数
    void leaveEvent(QEvent *event);
};

#endif // MYLABEL_H
#include "mylabel.h"

myLabel::myLabel(QWidget *parent):QLabel(parent) {}


void myLabel::enterEvent(QEnterEvent *event)
{
    setStyleSheet("QLabel{background:#409020;}");
}

void myLabel::leaveEvent(QEvent *event)
{
    setStyleSheet("QLabel{background:#000000;}");
}

同样的你还可以重写void mousePressEvent(QMouseEvent *event);

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值