类成员变量QVector<QVector<QObject *> > jdMap;定义时不知道大小,如何在运行时构造函数中设置jdMap的行列元素数量为100 *100
时间: 2024-09-15 18:08:30 浏览: 9
在Qt中,`QVector`是一个动态数组,你可以使用它来创建大小可变的数据结构。如果你想在运行时动态初始化一个`QVector<QVector<QObject*> >`类型的成员变量,例如让它有100行100列,你可以这样做:
首先,在构造函数中,你可以先创建一个空的二维向量,并然后填充元素:
```cpp
YourClass::YourClass() {
// 创建一个100*100大小的jdMap
jdMap.resize(100);
for (int i = 0; i < 100; ++i) {
jdMap[i].resize(100); // 每一行也初始化为100个QObject指针
// 这里可以进一步初始化每个元素,如jdMap[i][j] = new QObject();
}
}
```
在这个例子中,`jdMap.resize(100)`会创建一个内部容量为100的一维向量,而`jdMap[i].resize(100)`则会在每一行创建一个新的长度为100的内部向量。
如果你需要的是实际的对象而非简单的内存空间,记得替换`new QObject()`为创建你需要的实际对象的语句。
相关问题
QVector<QVector<QObject *> >初始化
QVector是一个Qt库中的动态数组,用于存储同类型的对象。`QVector<QVector<QObject *>>`表示一个动态二维向量,其中每个元素都是QObject类型的指针。这种结构通常用于存储对象的集合,其中每个内部的QVector可以看作是一行或一组相关的对象。
初始化这样的容器时,你可以直接分配空间并设置值,例如:
```cpp
QVector<QVector<QObject *>> objectMatrix(5, QVector<QObject*>(3)); // 创建一个5行3列的对象矩阵,所有内部QVector都为空
// 或者逐行初始化
objectMatrix = {
{new QObject(), new QObject(), new QObject()}, // 第一行
{new QObject(), nullptr, nullptr}, // 第二行
{nullptr, nullptr, nullptr}, // 省略...(后续行全为空)
...
};
```
这里的关键是传入构造函数的两个参数:行数和每行元素的数量。如果需要立即填充对象,记得处理内层QVector的null引用。
全局变量QVector<QPointF> GNpoints;,一个函数每200ms向GNpoints添加1个点,另一个函数同时根据GNPoints依次连接绘制折线
可以使用信号与槽来实现这个功能。
首先在类的头文件中声明一个`QTimer`成员变量,用来定时添加点:
```cpp
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = nullptr);
private:
QTimer *m_timer;
QVector<QPointF> m_points;
signals:
void addPoint(QPointF point);
public slots:
void timerTimeout();
};
```
然后在构造函数中初始化`QTimer`并启动它:
```cpp
MyClass::MyClass(QObject *parent)
: QObject(parent)
{
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &MyClass::timerTimeout);
m_timer->start(200); // 每200ms触发一次timeout信号
}
```
在`timerTimeout`槽函数中添加新的点,并发送`addPoint`信号:
```cpp
void MyClass::timerTimeout()
{
QPointF point(qrand() % 100, qrand() % 100); // 生成随机坐标
m_points.append(point); // 添加到点集中
emit addPoint(point); // 发送信号
}
```
在另一个函数中连接`addPoint`信号,并根据点集绘制折线:
```cpp
void drawLine(QVector<QPointF> points)
{
QPainter painter(this);
painter.setPen(QPen(Qt::black, 2));
for (int i = 1; i < points.size(); ++i) {
painter.drawLine(points[i - 1], points[i]); // 依次连接每两个相邻的点
}
}
// 在类的构造函数中连接信号与槽
connect(this, &MyClass::addPoint, this, &MyClass::drawLine);
```
这样,每200ms会自动添加一个新的点,并且折线会随着点的增加而不断绘制。注意,在`drawLine`函数中使用`QPainter`对象来进行绘制,需要在相应的`paintEvent`函数中调用`drawLine`函数。