QTableWidget и QLineEdit — позиция и текстовое содержимое

Мне трудно понять, как получить позицию (столбец и строку) и содержимое в QLineEdit. Я использую EventFilter, чтобы получить сигнал, но оттуда я застрял. любой совет? Спасибо

 ui->tableWidget->setRowCount(5);
ui->tableWidget->setColumnCount(5);

QStringList wordList;
wordList << "alpha" << "omega" << "omega2" << "omega3" <<"omicron" << "zeta";

for(int i = 0; i<5;i++)
{

QLineEdit *lineEdit = new QLineEdit;

QCompleter *completer = new QCompleter(wordList);
completer->setCaseSensitivity(Qt::CaseInsensitive);
lineEdit->installEventFilter(this);
lineEdit->setCompleter(completer);
ui->tableWidget->setCellWidget(i,i,lineEdit);
}

....

bool MainWindow::eventFilter(QObject * object, QEvent *event)
{

}

Я хотел бы получить позицию, когда я закончу редактирование. Я хотел бы выбрать слово из списка с помощью клавиш вверх и вниз или щелчка левой кнопкой мыши. Как только слово выбрано, оно заполняет QLineEdit. Тогда я хотел бы знать позицию. Теперь, если пользователь пишет текст, отличный от содержимого списка, позиция не должна возвращаться. Меня интересует только то, что в «WordList». Спасибо

0

Решение

Как вы указываете в своих комментариях, вы хотите получить текст только тогда, когда элемент, который установлен в QCompleter выбран, для этого мы должны использовать void QCompleter::activated(const QString & text) сигнал.

Для этого создается слот и устанавливается соединение:

*.час

private slots:
void onActivated(const QString &text);

* .cpp

    QCompleter *completer = new QCompleter(wordList);
...
connect(completer, qOverload<const QString &>(&QCompleter::activated), this, &MainWindow::onActivated);

Есть 2 возможных решения:

  • Первый, чтобы использовать положение QLineEdit что мы получаем через widget() метод QCompleterи QCompleter мы получаем это через sender() который является объектом, который испускает сигнал и pos(), тогда мы получаем QModelIndex с indexAt(), и это имеет информацию о строке и столбце:

void MainWindow::onActivated(const QString &text)
{
QCompleter *completer = static_cast<QCompleter *>(sender());
QModelIndex ix = ui->tableWidget->indexAt(completer->widget()->pos());
if(ix.isValid()){
qDebug()<<ix.row()<<ix.column()<<text;
}
}
  • Или строка и столбец сохраняются как свойство:

    QCompleter *completer = new QCompleter(wordList);
...
completer->setProperty("row", i);
completer->setProperty("column", i);

void MainWindow::onActivated(const QString &text)
{
QCompleter *completer = static_cast<QCompleter *>(sender());
qDebug()<< completer->property("row").toInt()<<completer->property("column").toInt()<<text;
}

В следующих ссылка на сайт вы можете найти оба полных примера

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]