我有一个带有 IconMode 视图、LeftToRight 流的 QListView,并且包装是正确的。
但是当我调整小部件的大小时,我遇到了一个问题,即该项目不是重新布局。
有没有办法让它重新布局?非常感谢您的帮助。
我有
QListView *myListView;
QStringList *myStringList;
QStringListModel *myListModel;
Run Code Online (Sandbox Code Playgroud)
我用这样的数据填写:
myStringList->append(QString::fromStdString(...));
myListModel->setStringList(*myStringList);
myListView->setModel(myListModel);
Run Code Online (Sandbox Code Playgroud)
我想更改一些列表条目的字体颜色,所以我试过:
for (int i = 0; i < myListModel->rowCount(); ++i) {
std::cerr << myListModel->index(i).data().toString().toStdString() << std::endl;
myListModel->setData(myListModel->index(i), QBrush(Qt::green), Qt::ForegroundRole);
}
Run Code Online (Sandbox Code Playgroud)
数据正确打印到cerr,但颜色不会改变.我错过了什么?
我开发了一个带有复选框的简单对话框,它允许用户从列表中选择一个或多个项目。除了标准的“确定”和“取消”按钮之外,它还添加了“全选”和“取消全选”按钮,允许用户一次选中/取消选中所有项目(这对于大型列表很方便)。
import os, sys
from PyQt4 import Qt, QtCore, QtGui
class ChecklistDialog(QtGui.QDialog):
def __init__(self, name, stringlist=None, checked=False, icon=None, parent=None):
super(ChecklistDialog, self).__init__(parent)
self.name = name
self.icon = icon
self.model = QtGui.QStandardItemModel()
self.listView = QtGui.QListView()
if stringlist is not None:
for i in range(len(stringlist)):
item = QtGui.QStandardItem(stringlist[i])
item.setCheckable(True)
check = QtCore.Qt.Checked if checked else QtCore.Qt.Unchecked
item.setCheckState(check)
self.model.appendRow(item)
self.listView.setModel(self.model)
self.okButton = QtGui.QPushButton("OK")
self.cancelButton = QtGui.QPushButton("Cancel")
self.selectButton = QtGui.QPushButton("Select All")
self.unselectButton = QtGui.QPushButton("Unselect All")
hbox = QtGui.QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(self.okButton)
hbox.addWidget(self.cancelButton)
hbox.addWidget(self.selectButton)
hbox.addWidget(self.unselectButton)
vbox = …Run Code Online (Sandbox Code Playgroud) 如何在QT 4.6中的QListView中删除所选项目的列表.这样的东西不起作用,迭代器变得无效:
QModelIndexList indexes = ui.listview_files->selectionModel()->selectedIndexes();
foreach(QModelIndex index, indexes)
{
model->removeRow(index.row());
}
Run Code Online (Sandbox Code Playgroud)
removeRows也不合适,它会删除跟随给定的N项.我使用QStandardItemModel来存储项目.
你如何改变它的行为,QListWidget以便它调整高度而不是选择(看似任意的)高度并添加滚动条?看截图:

这些QListView应尽可能水平填充尽可能多的空间(如果你愿意,可以创建尽可能多的"列".)然后,它们会根据需要包装并生成尽可能多的行以适合所有项目.应调整窗口大小时调整这些计算.这一切都很好.
然而,我想要发生的是,不是高度保持不变,QListView应该垂直增长或缩小,永远不需要任何滚动条.如有必要,滚动将在QWidget托管所有标签和列表的父级上进行处理.似乎一旦确定了它的高度QListWidget(不确定它的默认值来自哪里),它就永远不会改变.在某些情况下它太大了(参见上面的第二个"测试"列表)而在其他情况下太小(参见上面的第一个"空白地图"列表.)
上面的布局也没有什么奇怪:二QLabel的两QListWidget的在QVBoxLayout.下面是我对设置属性QListWidget的:
setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));
Run Code Online (Sandbox Code Playgroud)
(我已经尝试设置水平和垂直滚动条策略,但这只是关闭滚动条,剪切内容.不是我想要的.)
在图标模式下使用qlistview时,我需要在选择图标时完全删除hilighting.使用下面的代码不再突出显示图标下方的文本,但选中后仍然会在图标上显示蓝色
QString stylesheet = "";
stylesheet += "QListView::item:alternate {background-image: transparent; background-color: transparent;}";
stylesheet += "QListView::item:selected {background-image: transparent; background-color: transparent;padding: 0px;color: black;}";
stylesheet += "QListView::item:selected:active{background-image: transparent;background-color: transparent; color: black;}";
stylesheet += "QListView::item:selected:!active{background-image: transparent;background-color: transparent;color: black;}";
setStyleSheet(stylesheet);
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何在图标上更改所选颜色而不必继承QStandardItem?
我QListView用自定义创建了一个非常简单的例子QAbstractListModel.将QListView被显示,但它是空的.
我究竟做错了什么?
码:
#include <QListView>
#include <QAbstractListModel>
#include <QApplication>
class DataModel: public QAbstractListModel
{
public:
DataModel() : QAbstractListModel() {}
int rowCount( const QModelIndex & parent = QModelIndex() ) const { return 2; }
QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const
{
return "a";
}
};
int main( int argc, char **argv)
{
QApplication app(argc, argv, true);
QListView *lv = new QListView();
DataModel d;
lv->setModel( &d );
lv->show();
app.setMainWidget(lv);
app.exec(); …Run Code Online (Sandbox Code Playgroud) 我正在使用QListView来显示朋友名字的列表.当我点击名称时,它应该选择一个名称并显示与个人资料相关的信息,然后在右键单击它需要显示上下文菜单而不选择名称并显示个人资料信息.我面临的问题是右键单击它是选择名称,还显示上下文菜单.我不希望在右键单击中选择名称,只显示上下文菜单.我正在使用Qt contextmenuevent,如:
void contextMenuEvent(QContextMenuEvent *ce)
{
QPoint pos = ce->pos();
emit customContextMenuRequested(pos);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,从不调用上面的插槽.
我正在使用Qt5.2和C++来实现一个应用程序,需要显示一个列表,其中的部分类似于下面的示例图片:
模拟http://www.ngo-hung.com/files/images/contact_list_view_1.png
请注意我没有实现移动应用程序,我不需要右侧的字母索引.除了实现QTreeView之外,我有什么建议可以实现这个目标吗?谢谢.