2016-04-06 17 views
1

Ich bin ziemlich neu in Qt. Ich habe versucht, hier Antworten zu finden, war aber bisher nicht erfolgreich. Ich habe in einer main.cpp-Datei einen Vektor einer komplexen Struktur und möchte sie als Eingabe für den QCompleter verwenden, den ich in einer void-Funktion meiner Hauptwindow.cpp definiert habe, die unter anderem einen QLineEdit erzeugt, auf den ich Ordne diesen QCompleter zu. Wie soll ich diesen Vektor zu meinem Completer übertragen? Teil main.cpp:QCompleter - wie man Daten aus Datei importiert

//... 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(); 

Teil MainWindows.cpp:

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

Es scheint, kennt es nicht: LocationStringList

+0

Siehe https://stackoverflow.com/questions/5090969/read-a-text-file-to-qstringlist – sashoalm

Antwort

0

Was haben Sie versucht? Normalerweise können Sie es wie folgt verwendet werden:

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

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

myLineEdit->setCompleter(myCompleter); 

In Ihrem Beispiel würde ich die Liste Ihrer Klasse übergeben:

// 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); 
} 

new ein reserviertes Schlüsselwort ist, so sollten Sie wahrscheinlich nur Ihre Konstruktor

+0

Ich denke, meine Frage ist einfacher als das. Ich habe keine Warnung zu meinem LocationListString. Ich hoffe, dass es so ist. Es scheint, dass es in der Datei mainWindow.cpp nichts darüber weiß. Wie man es bekannt macht? – arnaud1000

+0

Ich habe meine Antwort bearbeitet – IceFire

Verwandte Themen