Qt信号与槽传递QList动态数组
根据实验,测试程序见下:
- QString的QList动态数组能够通过signal-slot机制进行传递;
- 自定义结构的QList动态数组也能通过signal-slot机制进行传递。
//"mainwindow.h"
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QDebug>
#include <QList>
#include "anotherobject.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
struct data_group{
QString str1;
QString str2;
int num;
};
signals:
void emitData2Slot(QString str);
void emitListData2Slot(QList<QString> list);
void emitBiListData2Slot(QList<data_group> list);
public slots:
void recvData(QString str);
void recvListData(QList<QString> list);
void recvbiListData(QList<data_group> list);
};
#endif // MAINWINDOW_H
//"mainwindow.cpp"
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QString str("hello sxy !");
connect(this,SIGNAL(emitData2Slot(QString)),this,SLOT(recvData(QString)));
// emit emitData2Slot(str);
QList<QString>list;
list.append("fist");
list.append("second");
list.append("third");
connect(this,SIGNAL(emitListData2Slot(QList<QString>)),this,SLOT(recvListData(QList<QString>)));
emit emitListData2Slot(list);
struct data_group data={"string1","string2",5};
struct data_group data2={"string2_1","string2_2",5};
QList<data_group> list_data_group;
list_data_group.append(data);
list_data_group.append(data2);
// connect(this,SIGNAL(emitBiListData2Slot(QList<data_group>)),this,SLOT(recvbiListData(QList<data_group>)));
AnotherObject* testobj=new AnotherObject(this);
connect(this,SIGNAL(emitBiListData2Slot(QList<data_group>)),testobj,SLOT(recvbiListData(QList<data_group>)));
emit emitBiListData2Slot(list_data_group);
}
MainWindow::~MainWindow()
{
}
void MainWindow::recvData(QString str){
qDebug()<<"recvData:"<<str;
}
void MainWindow::recvListData(QList<QString> list){
qDebug()<<"recvListData:"<<"list.size:"<<list.size();
}
void MainWindow::recvbiListData(QList<data_group> list){
qDebug()<<"recvbiListData:"<<"list.size:"<<list.size();
qDebug()<<"list[0].num:"<<list[0].num;
}
//"anotherobject.h"
#ifndef ANOTHEROBJECT_H
#define ANOTHEROBJECT_H
#include <QObject>
#include <QList>
#include<QDebug>
class AnotherObject: public QObject
{
Q_OBJECT
public:
explicit AnotherObject( QObject *parent = 0);
~AnotherObject();
struct data_group{
QString str1;
QString str2;
int num;
};
public slots:
void recvbiListData(QList<data_group> list);
};
#endif // ANOTHEROBJECT_H
//"anotherobject.cpp"
#include "anotherobject.h"
AnotherObject::AnotherObject( QObject *parent): QObject(parent)
{
}
AnotherObject::~AnotherObject(){
}
void AnotherObject::recvbiListData(QList<data_group> list){
qDebug()<<"AnotherObject-recvbiListData:";
qDebug()<<list.size();
qDebug()<<"list[0].num:"<<list[1].str2;
}