假设我的模型具有Qt :: DisplayRole的以下字符串的项目
<span>blah-blah <b>some text</b> other blah</span>
Run Code Online (Sandbox Code Playgroud)
我想要QTreeView(实际上,任何项目视图)将其渲染为富文本.相反,项目视图默认情况下将其呈现为纯文本.如何实现所需的渲染?
实际上,这是一个搜索结果模型.用户输入文本,根据该文本搜索某些文档,并向用户显示搜索结果,其中搜索的单词应比周围文本更大胆.
我正在编写PyQt应用程序,但在创建自定义列表视图时遇到了一些麻烦.我希望列表包含任意小部件(特别是一个自定义小部件).我该怎么做?
似乎替代方案是创建一个包含在滚动条中的表格或网格视图.但是,我希望能够利用模型/视图方法以及嵌入(树视图)支持内置函数句柄.
为了澄清,自定义小部件是交互式的(包含按钮),因此解决方案不仅仅需要绘制小部件.
假设我需要显示一个项目列表.每个项目都包含一个QPushButton图像和一些文本.当用户点击按钮时会发生某些事情(即我需要获取信号).在Qt中实现这个的正确方法是什么?
经过一些阅读,我明白如果我使用QListWidget和QListWidgetItem,这可以实现.我可以根据我的需要对每个QListWidgetItem进行子类化,并在列表小部件中设置它们.
但是,我还读到一个更合适的方法(MOdel View方法)是使用QlistView和QItemDelegate.但如果我使用QItemDelegate,似乎我只能绘制小部件.如何获得按钮事件?
对不起这篇巨大的帖子.我对何时使用QListWidget/QListView的整个概念感到困惑.
我需要在QListView中将选定的项目名称作为QString.我试过谷歌,但我还没发现任何有用的东西.
如何向QListView控件添加列.在seardhing时发现了一个方法addColumn,但在我的基于Qt 4.5.2(32位)的Qt Creator 1.2.1中, QListView根本就没有这样的方法!
那么我该如何添加列?
假设我有3列,那么添加行的代码是什么?
我有一个QTialog,用QT Designer创建,看起来像这样: 
左侧的服务器列表是带有QStringListModel的QListView.通过将视图的激活(QModelIndex)信号连接到对话框中的插槽功能,鼠标单击列表视图中的项目将使用所选项目的信息更新表单.
但是,向上或向下按键盘也会更改所选项目,但不会发出任何信号,因此表单不会更新以匹配所选项目.怎么解决这个问题?
我有一个显示项目列表的QListView但我不想要编辑项目(目前双击该项目允许您编辑它们).
这是我的代码:
self.listView = QListView()
self.model = QStringListModel([ "item1" , "item2" , "item3" ])
self.listView.setModel( self.model )
self.layout = QGridLayout()
self.layout.addWidget(self.listView, 0 , 0 )
self.setLayout(self.layout)
Run Code Online (Sandbox Code Playgroud) 我仍然在努力使用QListView,我试图在视图中选择一个特定的行,我无法弄清楚如何做到这一点.
我在StackOverflow上发现了一个类似的问题,它建议使用createIndex()模型的方法,但是这个方法是受保护的(可能它曾经是公共的但不再是),所以这对我不起作用.有什么建议吗?
在已经实例化的QAbstractListModel子类中,如何在每列中添加包含数据的行,并让关联的QListView显示新行?
似乎唯一的方法是在我的模型中重新实现insertRow和setData,然后在另一个函数中以某种顺序将它们一起破解以添加一行.我必须这样做吗?肯定Qt必须使添加新行更容易.
非常感谢!--Dany.
我在实现自定义窗口小部件渲染时遇到困难QListView.我目前有一个QListView显示我的自定义模型PlayQueue基于QAbstractListModel.
这对于简单的文本工作正常,但现在我想为每个元素显示一个自定义小部件.所以我将a子类化为QStyledItemDelegate实现这样的paint方法:
void QueueableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
QWidget *widget = new QPushButton("bonjour");
widget->render(painter);
}
Run Code Online (Sandbox Code Playgroud)
正确呈现选择背景但不显示小部件.我尝试使用QPainterQt示例中的简单命令,这很好用:
void QueueableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
if (option.state & QStyle::State_Selected)
painter->setPen(option.palette.highlightedText().color());
painter->setFont(QFont("Arial", 10));
painter->drawText(option.rect, Qt::AlignCenter, "Custom drawing");
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试了一些改变:
QStyledItemDelegate到QItemDelegatepainter->save()和 …