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);