LINUX.ORG.RU

помогите с QCompleter QT

 ,


0

1

Скажите пожалуйста как сделать, чтобы при нажатии на кнопку в QCompleter добавлялось новое слово, которое записано в текстовом поле? причем если это слово уже есть, оно не добавлялось повторно...

А как вы пробовали реализовать это? Если не пробовали, а хотите, чтобы сделали за вас, то в раздел Job.

P.S. Без фото с супом lenalena шансы на бесплатное решение тут не увеличивает)

CrossFire ★★★★★
()
Последнее исправление: CrossFire (всего исправлений: 1)
Ответ на: комментарий от CrossFire

Вот что получилось:

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

        QStandardItemModel *model=new QStandardItemModel(0,1);
        mCompleter = new QCompleter(model, this);
        ui->lineEdit->setCompleter(mCompleter);
}

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

void MainWindow::on_pushButton_clicked()
{
    QStandardItemModel *model=qobject_cast<QStandardItemModel*>(mCompleter->model());
    QStandardItem *item=new QStandardItem();
    item->setData(ui->lineEdit->text(),Qt::DisplayRole);
    model->appendRow(item);

}
lenalena919
() автор топика
Ответ на: комментарий от lenalena919

Все работает, только добавляются одни и те же элементы. Меня интересует насколько вообще правильный подход решения

lenalena919
() автор топика
Ответ на: комментарий от lenalena919

Я мб упорот, но я бы свой класс от QAbstractItemModel запилил и в нем бы хранил эти самые строки. А указатель на его экземпляр в этом самом mainwindow, чтобы не кастовать по сто раз как у тебя.

matrixd
()
Ответ на: комментарий от lenalena919

Можно, заголовочный файл сам додумаешь.

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

    m_model = new QStringListModel(this);
    m_model->setStringList(m_lst);
    QCompleter *completer = new QCompleter(m_model,  this);
    ui->lineEdit->setCompleter(completer);

    connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::addToCompleter);
}

void MainWindow::addToCompleter()
{
    m_lst.append(ui->lineEdit->text());
    m_model->setStringList(m_lst);
}
matrixd
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.