我很难弄清楚如何获取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。然后我想知道这个位置。现在,如果用户写入与列表内容不同的文本,则不应返回任何位置。我只对&#34; wordList&#34;中的内容感兴趣。谢谢
答案 0 :(得分:1)
正如您在评论中指出的那样,您只想在选择QCompleter
中设置的元素时获取文本,为此我们必须使用void QCompleter::activated(const QString & text)
信号。
为此,创建一个插槽并建立连接:
<强> *的.h 强>
private slots:
void onActivated(const QString &text);
<强> *。CPP 强>
QCompleter *completer = new QCompleter(wordList);
...
connect(completer, qOverload<const QString &>(&QCompleter::activated), this, &MainWindow::onActivated);
有两种可能的解决方案:
QLineEdit
的{{1}}方法获得的widget()
的位置,以及QCompleter
我们通过{{1}获得的位置}这是发出信号的对象QCompleter
。然后我们得到sender()
pos()
,这里有行和列的信息:QModelIndex
indexAt()
在以下link中,您可以找到两个完整的示例