使用编辑QVector

时间:2014-01-16 00:31:35

标签: c++ qt qmainwindow qlabel qvector

所以我试图创建一个简单的程序,允许我使用随机函数操作向量,但我觉得我忘了一些相当重要的东西&基本的 请随时查看我发布的代码&让我知道解决方案是什么。我收到的错误是myvec是“索引超出范围,这只意味着回滚在我创建的插入方法中不起作用。不知道为什么,我仍然是新手。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QVector>

QVector<QString> myvec;

void insert(QVector<QString> vec);

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::insert(QVector<QString> vec){
    vec.push_back("Hello World");
}

void MainWindow::on_pushButton_clicked()
{
    insert(myvec);
    ui->label->setText(myvec.at(0));
}

1 个答案:

答案 0 :(得分:1)

你的功能

void MainWindow::insert(QVector<QString> vec){
    vec.push_back("Hello World");
}

通过值获取向量。这意味着当它被调用时,参数是复制以便在函数中使用,当你在那里修改它时,它不会反映在函数调用的外部上(因为修改是在副本上完成的。)

您希望通过引用传递 ,因此不会复制它,并且对仍在外部函数调用的对象进行修改。这是通过在签名中添加&来完成的:

void MainWindow::insert(QVector<QString> & vec){
    vec.push_back("Hello World");
}

请注意,您也可以通过const引用传递,这通常是出于效率原因。这意味着只有一个引用被传递给函数,但是不允许在函数体内修改实例。