QListWidget 文本更改时的可编辑项目信号
QListWidget Editable Item signal upon text change
在 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);
如何让它在编辑项目 (0) 期间在每次更改/按键时发出信号,以便我可以实现自动完成类型功能?
自动完成的任务必须通过委托在编辑器中完成:
#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();
}
在 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);
如何让它在编辑项目 (0) 期间在每次更改/按键时发出信号,以便我可以实现自动完成类型功能?
自动完成的任务必须通过委托在编辑器中完成:
#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();
}