- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的 QListWidget 子类中,当我使用 setSelectionModel 替换它的 QItemSelectionModel 时,列表小部件停止发出它的 itemSelectionChanged 信号。在实际代码中,我这样做是为了安装 QItemSelectionModel 的子类,但即使我只使用新的 QItemSelectionModel 也会出现问题。
MyListWidget::MyListWidget(QWidget* parent)
: QListWidget(parent)
{
QItemSelectionModel* oldSelectionModel = selectionModel();
QItemSelectionModel* newSelectionModel = new QItemSelectionModel(model(), oldSelectionModel->parent());
setSelectionModel(newSelectionModel);
oldSelectionModel->deleteLater();
}
在调试器中,我可以看到 QItemSelectionModel 发出其 selectionChanged 信号,但 QListWidget 从未发出其对应的 itemSelectionChanged 信号。
如果我注释掉这个构造函数的主体,一切正常。和以前一样,我可以看到 QItemSelectionModel 发出它的 selectionChanged 信号,但现在触发 QListWidget 发出 itemSelectionChanged。
看起来我对 setSelectionModel 的调用导致 QItemSelectionModel::selectionChanged 和 QListWidget::itemSelectionChanged 之间的连接中断。
顺便说一句,我检查了我是否将错误的参数传递给了我的新 QItemSelectionModel。我创建后,newSelectionModel 的model() 和parent() 与oldSelectionModel 完全相同。我还尝试注释掉对 deleteLater 的调用,但这没有帮助。
非常感谢任何帮助。
最佳答案
根据 QAbstractItemView
的 Qt
文档,setSelectionModel
替换了当前的选择模型,如果 setModel( )
在此之后调用。
Note that, if you call setModel() after this function, the given selectionModel will be replaced by one created by the view.
此外,从 QListWidget
文档中,
QListWidget is a convenience class that provides a list view similar to the one supplied by QListView, but with a classic item-based interface for adding and removing items. QListWidget uses an internal model to manage each QListWidgetItem in the list.
看起来每当您添加项目时,模型都会更新/刷新,从而使您的自定义选择模型无效(只是我的想法)。
此外,您不需要根据 Qt
文档删除旧的选择模型
Note: It is up to the application to delete the old selection model if it is no longer needed; i.e., if it is not being used by other views. This will happen automatically when its parent object is deleted. However, if it does not have a parent, or if the parent is a long-lived object, it may be preferable to call its deleteLater() function to explicitly delete it.
如果您想要那种级别的自定义,QListView
可能是更好的选择。
只是想知道,您是否尝试过在将所有项目添加到列表小部件后设置自定义选择模型?
关于c++ - QListWidget 中的 setSelectionModel 停止发射 itemSelectionChanged 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35050044/
我正在通过单击 ui 上的按钮更改 QListWidgetItem 标题(QListWidgetItem 文本),在此之下我还调用了 repaint() 和 update(),但标题不会更改(刷新),
我有课 class MyClass { public: QString name; int age; }; ... MyClass* itm1= new MyClass(); itm1
我的应用程序 (Qt 4.6) 要求我在列表中显示某些消息,该列表在添加新行时总是向下滚动(因此最近的行始终可见)。 由于我在包括显示这些单行消息在内的整个过程中遇到性能问题,所以我运行了一些测试并发
我有一个 QListWidget,里面有一些小部件: QListWidgetItem* w = new QListWidgetItem(ui->listWidget); ui->listWidget-
是否可以根据其内容调整 QListWidget 的高度和宽度? sizeHint() 始终返回 256, 192,无论其内容是什么。 QListWidgetItem 的 sizeHint() 返回 -
我用一些项目创建了 QListWidget。 QHBoxLayout* h_layout = new QHBoxLayout; h_layout->setMargin( 0 ); me
我正在 Qt 中创建一个可排序列表。该代码对于向下滚动效果非常好,但是当我在向下滚动列表后获取可拖动项目时遇到一些问题。我添加了一些测试用例屏幕截图以便更好地理解 这是测试用例代码 #incl
我是 Qt 框架的新手。在新应用程序中,我想创建包含自定义项目的列表。这些项目非常简单,必须包含标题标签、缩略图和描述标签 (picture here) 现在我不想玩自定义绘图和所有这些东西,因为我认
我创建了一个自定义 QListWidget,其中添加了自定义列表小部件(在本例中只是 QPushButton 小部件),所有设置都添加到它的 QListWidgetItems 中,以便我可以从 QPu
我有一个带有一系列 QListWidget 的 GUI,第一个 QListWidget 应该有文本项和图标项,图标的标签位于侧面。其他 QListWidget 的项目应与第一个 QListWidget
我在 PySide2 中有一个 QListWidget,我希望所选项目具有不同的颜色。这可能吗?我将附上两张图片来演示。 我目前拥有的: 这就是我想要的: 最佳答案 您必须使用委托(delegate)
我想创建一个包含许多这些项目的 QListView 或 QListWidget。我研究过创建委托(delegate)并使用 setItemWidget 来设置小部件。我在这两方面都遇到困难。 下面是在
我需要在“.ui”文件中的 QListWidget 提出的不同选项中包含文本和希腊符号(用于简单的数学方程)(我以前使用 Qt Designer,如果重要的话我喜欢 python)。我希望选项显示如下
删除QListWidget中的一项后,我在更新它时遇到了一些问题。 这是代码的一部分: class Window(QMainWindow): list_1 = [] #The items are
我想写一个“无限滚动”的列表小部件。滚动应该根据计时器自动发生。不会有任何用户交互。例如,该列表包含项目 0-100。如果滚动区域达到第 100 项,则显示的下一个项目应该是第 1 项,依此类推(如滚
在 Qt 4.6.1 上,当我连接来自 QListWidget 的 itemChanged 信号时,我没有看到每次编辑时的连续发射行为,如中所述 Qt - signal for when QListW
我问这个问题是因为我不知道如何用谷歌搜索它,我找不到合适的关键字。 我有一个包含字符串的QListWidget。字符串很长,如果我禁用水平滚动,这正是我想要的,那么文本以...结尾,因为它太长了。 我
在我的 QMainWindow 构造函数中,我读取了一个数据库并用项目填充了我的 QListWidget。显然没有选择任何项目,所以我必须自己做。我还有一个插槽,当我单击列表中的项目时将调用它。 我试
我有一个包含多个项目的 QListWidget,每个项目都像一个按钮,在单击时做出响应。我遇到了一个问题,如果您单击一个项目并将鼠标拖动到屏幕上除您单击的项目之外的任何其他位置,那么程序将导致段错误并
如何使我的 QListWidget 高度与我的主窗口相同? 因此,如果我更改主窗口,它必须调整大小,如果无法在小部件中查看所有列表,则使滚动条可见,等等。 最佳答案 Qt 有一个叫做 layouts
我是一名优秀的程序员,十分优秀!