QT开发 QListWidget点击返回行号的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT开发 QListWidget点击返回行号的问题相关的知识,希望对你有一定的参考价值。

大家好,小弟在QT碰到了这么一个问题,我建立了一个QListWidget,通过insertintem添加字段,大概生成了5000行左右。那现在问题来了,我随便点击一个,怎么知道我点击的哪一行??有什么函数或者方法吗。因为我要通过这个行号对相应的行进行操作。,谢谢大家。

listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) #设置选择模式
QList<QListWidgetItem*> selItemList = listWidget.selectedItems() //返回一个包含选中了的item对象 的list 对象
鼠标点击时,会发出itemClicked()信号。信号的参数是ListWidgetItem *,用此指针和数据源的每一项逐个比较,就是到行号了。(不过单纯知道ListWidget行号没有意义,因为画面排序后行号会变化)
参考技术A 采用QListWidget的函数currentRow就可以得到被选中的行号,这个函数也只有在用户点击了List中的某一行时才起作用

Qt入门系列开发教程高级控件篇QListWidget列表小部件

效果图

描述

QListWidget 是一个方便的类,它提供类似于 QListView 提供的列表视图,但具有用于添加和删除项目的经典基于项目的界面。 QListWidget 使用内部模型来管理列表中的每个 QListWidgetItem。
要获得更灵活的列表视图小部件,请将 QListView 类与标准模型一起使用。
列表小部件的构造方式与其他小部件相同:

      QListWidget *listWidget = new QListWidget(this);

列表小部件的 selectionMode() 决定了列表中可以同时选择多少个项目,以及是否可以创建复杂的项目选择。这可以使用 setSelectionMode() 函数进行设置。
有两种方法可以将项目添加到列表中:可以将列表小部件作为其父小部件来构造它们,或者可以在没有父小部件的情况下构造它们并稍后添加到列表中。如果在构建项目时已经存在列表小部件,则第一种方法更易于使用:

     new QListWidgetItem(tr("Oak"), listWidget);
      new QListWidgetItem(tr("Fir"), listWidget);
      new QListWidgetItem(tr("Pine"), listWidget);

如果您需要在特定位置将新项目插入列表中,则应在没有父小部件的情况下构造它。然后应该使用 insertItem() 函数将其放置在列表中。列表小部件将拥有该项目的所有权。


      QListWidgetItem *newItem = new QListWidgetItem;
      newItem->setText(itemText);
      listWidget->insertItem(row, newItem);

对于多个项目,可以使用 insertItems() 代替。使用 count() 函数可以找到列表中的项目数。要从列表中删除项目,请使用 takeItem()。
可以使用 currentItem() 找到列表中的当前项目,并使用 setCurrentItem() 进行更改。用户还可以通过使用键盘导航或单击不同的项目来更改当前项目。当当前项目发生变化时,currentItemChanged() 信号与新的当前项目和之前的当前项目一起发出。
另请参阅 QListWidgetItem、QListView、QTreeView、模型/视图编程和选项卡对话框示例。

属性

  • count : const int数目
  • currentRow : int当前行
  • sortingEnabled : bool 排序是否开启

API

//添加item
void addItem(const QString &label)
void addItem(QListWidgetItem *item)
void addItems(const QStringList &labels)
//关闭编辑
void closePersistentEditor(QListWidgetItem *item)
//条数
int count() const
//当前item
QListWidgetItem *currentItem() const
//当前行数
int currentRow() const
//编辑item
void editItem(QListWidgetItem *item)
//查找item们
QList<QListWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const
//插入item
void insertItem(int row, QListWidgetItem *item)
void insertItem(int row, const QString &label)
void insertItems(int row, const QStringList &labels)
//是否开启编辑
bool isPersistentEditorOpen(QListWidgetItem *item) const
//是否开启排序
bool isSortingEnabled() const
//通过行数获取item
QListWidgetItem *item(int row) const
//通过点获取item
QListWidgetItem *itemAt(const QPoint &p) const
QListWidgetItem *itemAt(int x, int y) const
//返回给定项目中显示的小部件。
QWidget *itemWidget(QListWidgetItem *item) const
//开启编辑
void openPersistentEditor(QListWidgetItem *item)
//删除给定项目上设置的小部件。
void removeItemWidget(QListWidgetItem *item)
//获取item行
int row(const QListWidgetItem *item) const
//选择的item们
QList<QListWidgetItem *> selectedItems() const
//设置当前item
void setCurrentItem(QListWidgetItem *item)
void setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command)
//设置当前行
void setCurrentRow(int row)
//设置当前行,选择模型的更新方式。
void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command)
//设置要在给定项目中显示的小部件。
void setItemWidget(QListWidgetItem *item, QWidget *widget)
//开启排序
void setSortingEnabled(bool enable)
//排序item
void sortItems(Qt::SortOrder order = Qt::AscendingOrder)
//从列表小部件的给定行中删除并返回项目; 否则返回 nullptr。
QListWidgetItem *takeItem(int row)
//返回视口上由 item 处的项目占用的矩形。
QRect visualItemRect(const QListWidgetItem *item) const

公有虚槽函数

virtual void dropEvent(QDropEvent *event) override
virtual void setSelectionModel(QItemSelectionModel *selectionModel) override

公有槽函数

//清空视图
void clear()
//必要时滚动视图以确保项目可见。
void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

信号

//每当当前项目更改时,都会发出此信号。
void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
//每当当前项目更改时,都会发出此信号。
void currentRowChanged(int currentRow)
//每当当前项目文本更改时,都会发出此信号。
void currentTextChanged(const QString &currentText)
//该信号在物品被激活时发出
void itemActivated(QListWidgetItem *item)
//每当 item 的数据发生更改时,都会发出此信号。
void itemChanged(QListWidgetItem *item)
//当鼠标按钮单击窗口小部件中的项目时,该信号与指定项目一起发出。
void itemClicked(QListWidgetItem *item)
//当鼠标按钮双击窗口小部件中的项目时,该信号与指定项目一起发出。
void itemDoubleClicked(QListWidgetItem *item)
//当鼠标光标进入项目时发出此信号。 item 是输入的项目
void itemEntered(QListWidgetItem *item)
//当在窗口小部件中的项目上按下鼠标按钮时,将与指定项目一起发出此信号。
void itemPressed(QListWidgetItem *item)
//item选择变化
void itemSelectionChanged()

以上是关于QT开发 QListWidget点击返回行号的问题的主要内容,如果未能解决你的问题,请参考以下文章

Qt学习之QListWidget删除Item

Qt入门系列开发教程高级控件篇QListWidget列表小部件

Qt学习之QListWidget删除Item

在QT中怎么隐藏QComboBox的下拉列表并当单击QComboBox的编辑框时,就弹出QListWidget窗口

Qt - 何时编辑 QListWidget 行的信号?

Qt Designer QListWidget 复选框