c++ - 文本更改时 QListWidget 可编辑项目信号

标签 c++ qt qt5 qlistwidget qcompleter

在 Qt 4.6.1 上,当我从 QListWidget 连接 itemChanged 信号时,我没有看到每次编辑时持续发出的行为,如中讨论的

Qt - signal for when QListWidget row is edited?

对我来说,它仅在按“Enter”键时发出 itemChanged,与 commitData 解决方案的方式相同。

QListWidget* Groups = new QListWidget();  
Groups->setEditTriggers(QAbstractItemView::AllEditTriggers);    
connect(Groups,SIGNAL(itemChanged(QListWidgetItem*)),this,SLOT(slot_itemchanged(QListWidgetItem*)));
connect(Groups->itemDelegate(), SIGNAL(commitData(QWidget*)), this, SLOT(slot_dataCommited(QWidget*)));
Groups->insertItem(0,"search");
Groups->item(0)->setFlags(Groups->item(0)->flags() | Qt::ItemIsEditable);

如何让它在编辑 item(0) 期间每次更改/按键时发出信号,以便我可以实现自动完成类型功能?

最佳答案

自动完成的任务必须在编辑器中通过委托(delegate)完成:

#include <QtWidgets>

class CompleteDelegate: public QStyledItemDelegate
{
public:
    using QStyledItemDelegate::QStyledItemDelegate;
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
    {
        QWidget *editor = QStyledItemDelegate::createEditor(parent, option, index);
        if(QLineEdit *le = qobject_cast<QLineEdit *>(editor)){
            QStringList wordList{"alpha", "omega", "omicron", "zeta"};
            QCompleter *completer = new QCompleter(wordList, le);
            //completer->setCompletionMode(QCompleter::InlineCompletion);
            le->setCompleter(completer);
        }
        return editor;
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QListWidget w;
    CompleteDelegate *delegate = new CompleteDelegate(&w);
    w.setItemDelegate(delegate);
    w.setEditTriggers(QAbstractItemView::AllEditTriggers);
    for(const QString & text: {"search", "find"}){
        QListWidgetItem *it = new QListWidgetItem(text);
        it->setFlags(it->flags()| Qt::ItemIsEditable);
        w.addItem(it);
    }
    w.show();
    return a.exec();
}

关于c++ - 文本更改时 QListWidget 可编辑项目信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53581040/

相关文章:

python - 无法终止 PyQT QThread

android - Qt/QML SwipeDelegate 在移动设备(Android、iOS)上无法正常工作

c++ - Qt C++ 中基于 ID 的翻译

qt5 - QMake CONFIG()函数和 'active configuration'

c++ - Qt Drop 事件未触发

c++ - 构造和初始化列表 : what the compiler do?

c++ - 在 C++ 中为 iOS 选择 3D 引擎

c++ - 如何在不让用户等待的情况下管理多个线程?

c++ - 尽管编译顺利通过,但 Eclipse 在互斥体类型上显示错误

c++ - 如何在 Qt 中处理所有子部件的按键事件?