【问题标题】:QTableWidget and QLineEdit - position and text contentQTableWidget 和 QLineEdit - 位置和文本内容
【发布时间】:2018-03-18 21:34:13
【问题描述】:

我很难弄清楚如何在 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”中的内容感兴趣。谢谢

【问题讨论】:

  • 你想什么时候得到行和列,什么时候完成编辑?
  • Eyllanesc:是的,我想在我完成编辑后得到这个职位。我想通过上下键或鼠标左键从列表中选择一个单词。一旦选择了一个词,该词将填充 QLineEdit。然后我想知道这个位置。谢谢

标签: c++ qt qt5 qlineedit qcompleter


【解决方案1】:

正如您在 cmets 中指出的那样,您只想在选择 QCompleter 中设置的元素时获取文本,为此我们必须使用 void QCompleter::activated(const QString &amp; 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);

有两种可能的解决方案:

  • 第一个使用我们通过QCompleterwidget()方法获得的QLineEdit的位置,QCompleter我们通过sender()获得它,这是发出信号的对象和pos()。然后我们得到QModelIndexindexAt(),这有行和列的信息:

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

在下面的link 你可以找到两个完整的例子

【讨论】:

  • Eyllanesc:是的,我想在我完成编辑后得到这个职位。我想通过上下键或鼠标左键从列表中选择一个单词。一旦选择了一个词,该词将填充 QLineEdit。然后我想知道这个位置。谢谢
  • @VMI 如果用户写的文本与列表的内容不同,他是否也应该指出位置?
  • 如果用户编写的文本与列表内容不同,则不应返回任何位置。我只对列表中的内容感兴趣。
  • @VMI 编辑您的问题并指定它。
猜你喜欢
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多