C++ QCompleter-如何从文件导入数据

C++ QCompleter-如何从文件导入数据,c++,qt,qcompleter,C++,Qt,Qcompleter,我对Qt很陌生。我试图在这里找到答案,但到目前为止没有成功。 我在main.cpp文件中有一个复杂结构的向量,我想使用它作为我在mainwindow.cpp的void函数中定义的QCompleter的输入,该函数创建了一个QLineEdit,我将该QCompleter与之关联。 我该如何将这个向量转移到我的补全符? main.cpp的一部分: //... l is a vector based on a struct containing, among other thing , string

我对Qt很陌生。我试图在这里找到答案,但到目前为止没有成功。 我在main.cpp文件中有一个复杂结构的向量,我想使用它作为我在mainwindow.cpp的void函数中定义的QCompleter的输入,该函数创建了一个QLineEdit,我将该QCompleter与之关联。 我该如何将这个向量转移到我的补全符? main.cpp的一部分:

//... l is a vector based on a struct containing, among other thing , string name.
QApplication a(argc, argv);
QStringList *LocationStringList=new QStringList;
for (int k=0;k!=l.size();k++)   {
    LocationStringList->append(QString::fromStdString(l[k].name));
}
MainWindow w;
w.show();
MainWindows.cpp的一部分:

void MainWindow::new()
{
    ...
    QCompleter *cmpt;
    cmpt=new QCompleter(LocationStringList,this);
    cmpt->setCaseSensitivity(Qt::CaseInsensitive);
    QLineEdit *locationLineEdit = new QLineEdit();
    locationLineEdit->setCompleter(cmpt);
    ...

它似乎不知道:LocationStringList

您尝试了什么?通常,您可以这样使用它:

QStringList list;
for(auto& complexStructObject : complexStructList)
    list << complexStructObject.getStringForCompletion();

QCompleter* myCompleter = new QCompleter(list, this);

myLineEdit->setCompleter(myCompleter);
QStringList列表;
用于(自动和复杂结构对象:复杂结构列表)
列出setCompleter(myCompleter);
在您的示例中,我会将列表传递给您的班级:

// main.cpp

// above keeps unchanged
MainWindow w(LocationStringList);
w.show();
// at the end, do not forget to delete!! your string list is not managed; better yet use a unique_ptr

// MainWindow.h
#include <QStringList>

class MainWindow
{
Q_OBJECT
public:
    MainWindow(QStringList* stringList);

    // ...
};

// MainWindows.cpp
MainWindow::MainWindow(QStringList* stringList)
{
    QCompleter *cmpt;
    cmpt=new QCompleter(*stringList, this);
    cmpt->setCaseSensitivity(Qt::CaseInsensitive);
    QLineEdit *locationLineEdit = new QLineEdit();
    locationLineEdit->setCompleter(cmpt);
}
//main.cpp
//以上保持不变
主窗口w(位置字符串列表);
w、 show();
//最后,别忘了删除!!您的字符串列表未被管理;最好使用一个独特的ptr
//主窗口
#包括
类主窗口
{
Q_对象
公众:
主窗口(QStringList*stringList);
// ...
};
//MainWindows.cpp
MainWindow::MainWindow(QStringList*stringList)
{
QCompleter*cmpt;
cmpt=新的QCompleter(*stringList,本文件);
cmpt->setCaseSensitivity(Qt::CaseSensitivity);
QLineEdit*locationLineEdit=新的QLineEdit();
locationLineEdit->setCompleter(cmpt);
}

new
是一个保留关键字,因此您可能只需要使用构造函数

您尝试了什么?通常,您可以这样使用它:

QStringList list;
for(auto& complexStructObject : complexStructList)
    list << complexStructObject.getStringForCompletion();

QCompleter* myCompleter = new QCompleter(list, this);

myLineEdit->setCompleter(myCompleter);
QStringList列表;
用于(自动和复杂结构对象:复杂结构列表)
列出setCompleter(myCompleter);
在您的示例中,我会将列表传递给您的班级:

// main.cpp

// above keeps unchanged
MainWindow w(LocationStringList);
w.show();
// at the end, do not forget to delete!! your string list is not managed; better yet use a unique_ptr

// MainWindow.h
#include <QStringList>

class MainWindow
{
Q_OBJECT
public:
    MainWindow(QStringList* stringList);

    // ...
};

// MainWindows.cpp
MainWindow::MainWindow(QStringList* stringList)
{
    QCompleter *cmpt;
    cmpt=new QCompleter(*stringList, this);
    cmpt->setCaseSensitivity(Qt::CaseInsensitive);
    QLineEdit *locationLineEdit = new QLineEdit();
    locationLineEdit->setCompleter(cmpt);
}
//main.cpp
//以上保持不变
主窗口w(位置字符串列表);
w、 show();
//最后,别忘了删除!!您的字符串列表未被管理;最好使用一个独特的ptr
//主窗口
#包括
类主窗口
{
Q_对象
公众:
主窗口(QStringList*stringList);
// ...
};
//MainWindows.cpp
MainWindow::MainWindow(QStringList*stringList)
{
QCompleter*cmpt;
cmpt=新的QCompleter(*stringList,本文件);
cmpt->setCaseSensitivity(Qt::CaseSensitivity);
QLineEdit*locationLineEdit=新的QLineEdit();
locationLineEdit->setCompleter(cmpt);
}

new
是一个保留关键字,因此您可能只需要使用您的构造函数

请看,我认为我的问题比这更基本。我的LocationListString上没有任何警告。我希望那样可以。在mainWindow.cpp文件中,它似乎不知道这一点。我想我的问题比这更基本。我的LocationListString上没有任何警告。我希望那样可以。在mainWindow.cpp文件中,它似乎不知道这一点。如何让人知道?