2016-04-06 25 views
1

Qt. Burada cevap bulmaya çalıştım ama şu ana kadar başarılı olmadı. Bir main.cpp dosyasında karmaşık bir yapının bir vektörüne sahibim ve onu bir mainline olarak tanımladığım QCompleter için bir giriş olarak kullanmak istiyorum. bu QCompleter'ı ilişkilendirin. Bu vektörü tamamlayıcıya nasıl aktarabilirim? main.cpp ait Bölüm: MainWindows.cpp aitQCompleter - dosyadan nasıl veri içe aktarılır

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

kısmı: O bilmiyor gibi görünüyor

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

: LocationStringList

+0

https://stackoverflow.com/questions/5090969/read-a-text-file-to-qstringlist adresine bakın. – sashoalm

cevap

0

Ne denediniz mi?

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

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

myLineEdit->setCompleter(myCompleter); 

, senin sınıfına listesini geçerdi:

// 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 ayrılmış bir anahtar kelimedir, muhtemelen sadece yapıcı kullanmalısınız böylece Normalde, bu gibi kullanabilirsiniz

+0

Sorunun bundan daha basit olduğunu düşünüyorum. LocationListString'imde uyarı yok. Umarım bu şekilde olur. MainWindow.cpp dosyasında bunu bilmiyor gibi görünüyor. Nasıl bilinir? – arnaud1000

+0

Cevabımı düzenledim – IceFire

İlgili konular