1

私はQtにかなり慣れていません。ここで答えを見つけようとしましたが、これまでのところ成功しませんでした。main.cpp ファイルに複雑な構造体のベクトルがあり、それを QCompleter の入力として使用したいこの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

4

1 に答える 1

0

何を試しましたか?通常、次のように使用できます。

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

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

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

newは予約済みのキーワードなので、おそらくコンストラクターを使用する必要があります

于 2016-04-06T15:03:08.467 に答える