C++ Qt5学习笔记 2020-10-9 (将qlabel放到容器中,并使用数组对其控制)
将初始化的qlabel放到数组中之前通过拖拽label显示在区域范围内的功能中,通过for循环初始化qlabel,但想要操作控制时,无法定位到,所以把label都放到数组中。错误的方法:一开始想的太简单,像下面这样做,结果不行。在mainwindow.h中://头文件#include <QLabel>#include <QPushButton>//创建控件数组QPushBu
将qlabel放到数组中
之前通过拖拽label显示在区域范围内的功能中,通过for循环初始化qlabel,但想要操作控制时,无法定位到,所以把label都放到数组中。
错误的方法:
一开始想的太简单,像下面这样做,结果不行。
在mainwindow.h中:
//头文件
#include <QLabel>
#include <QPushButton>
//创建控件数组
QPushButton *button[10];
QLabel *qlabel_group[64];
在mainwindow.cpp中:
qlabel_group[qlabel_nm-1] = new QLabel(ui->groupBox_4);
qlabel_group[qlabel_nm-1]->setGeometry(((qlabel_nm-1)%9+1)*100+((qlabel_nm-1)%9-1)*60+70,120*((qlabel_nm-1)/9+1)-40,60,60);
qlabel_group[qlabel_nm-1]->setStyleSheet("border:2px solid black;");
qlabel_group[qlabel_nm-1]->show();
结果反而显示不了了。
使用方法:
使用容器来存放QLabel。
在mainwindow.h中:
//头文件
#include <QLabel>
//设置容器
//QList和QVector二选一
QList<QLabel*> qlab_group;
//QVector<QLabel*> qlab_group;
QList,QVector,QLinkedList三种容器的区别:https://blog.csdn.net/navyqh/article/details/52679930
在mainwindow.cpp中:
qlab_group.push_back(new QLabel(ui->groupBox_4));
qlab_group[qlabel_nm-1]->setGeometry(((qlabel_nm-1)%9+1)*100+((qlabel_nm-1)%9-1)*60+70,120*((qlabel_nm-1)/9+1)-40,60,60);
qlab_group[qlabel_nm-1]->setStyleSheet("border:2px solid black;");
qlab_group[qlabel_nm-1]->show();
由于push_back(_X)等同于insert(end(),_X)
所以也可以:
qlab_group.insert(qlab_group.end(),new QLabel(ui->groupBox_4));
接着就可以使用数组对这些label进行控制了。
示范
1、这是我写的一个鼠标释放事件,已经完成了鼠标拖拽放置qlabel。如下代码在拖拽完成后,会在区域内相对位置放置一个qlabel,最大放置数为63(9*7)个,为了展示qlabel的控制,在拖拽个数大于63次时,第七个label的边框粗细会变为10px。(qlabel_nm需要先置0,因为数组是从0开始的,不置0会报错out of range)
//鼠标释放事件
void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
if (clicked_label_signal == true)
{
//设置鼠标样式
this->setCursor(Qt::ArrowCursor); //改变鼠标样式为小拳拳
clicked_label_signal = false; //label拖拽点击信号
if (e->x()>305 && e->x()<1905 && e->y()>86 && e->y()<1071) //label放置区域
{
qlabel_nm++; //label个数,初值设为0
if (qlabel_nm<64) //label最大个数
{
//qlab_group.push_back(new QLabel(ui->groupBox_4));
qlab_group.insert(qlab_group.end(),new QLabel(ui->groupBox_4)); //新生成的qlabel加入数组末尾
//label显示的位置
qlab_group[qlabel_nm-1]->setGeometry(((qlabel_nm-1)%9+1)*100+((qlabel_nm-1)%9-1)*60+70,120*((qlabel_nm-1)/9+1)-40,60,60);
//label粗细为2px
qlab_group[qlabel_nm-1]->setStyleSheet("border:2px solid black;");
qlab_group[qlabel_nm-1]->show();
}
//当拖拽个数大于63时,第七个label的粗细变为10px
else{
qlab_group[6]->setStyleSheet("border:10px solid black;");
}
}
}
}
运行结果:
这样就实现了定位到某个label进行控制。
2、生成指定个数的label方格:
//在mainwindow.h中
QList<QLabel*> qlab_group1;
int qlab_nm1;
//在mainwindow.cpp中,直接写在ui中即可
for(qlab_nm1=1;qlab_nm1<46;qlab_nm1++)
{
qlab_group1.insert(qlab_group1.end(),new QLabel(ui->groupBox_3));
qlab_group1[qlab_nm1-1]->setGeometry(30+((qlab_nm1-1)%5)*155,30+((qlab_nm1-1)/5)*105,70,30);
qlab_group1[qlab_nm1-1]->setStyleSheet("border:2px solid black;border-radius:1px;background-color:rgb(128,128,128,128);");
qlab_group1[qlab_nm1-1]->show();
}
运行结果:
更多推荐



所有评论(0)