我正在使用QListView来显示朋友名字的列表.当我点击名称时,它应该选择一个名称并显示与个人资料相关的信息,然后在右键单击它需要显示上下文菜单而不选择名称并显示个人资料信息.我面临的问题是右键单击它是选择名称,还显示上下文菜单.我不希望在右键单击中选择名称,只显示上下文菜单.我正在使用Qt contextmenuevent,如:
void contextMenuEvent(QContextMenuEvent *ce)
{
QPoint pos = ce->pos();
emit customContextMenuRequested(pos);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,从不调用上面的插槽.
我在没有键盘/鼠标的系统上做主题所说的事情,所以我需要“从代码”完成这项工作。当我更改 QListView 的 RootIndex 时,我想突出显示第一行。
这是我制作的一个小型测试项目中的 mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QEvent>
#include <QKeyEvent>
#include <QDebug>
#include <QTimer>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
model = new QFileSystemModel;
model->setRootPath("/Users/anders/Downloads/Browser");
listView = new QListView;
listView->setModel(model);
listView->show();
QTimer::singleShot(2000, this, SLOT(LightItUp1()));
}
void MainWindow::LightItUp1()
{
qDebug("LightItUp1");
listView->setRootIndex(model->index("/Users/anders/Downloads"));
listView->setCurrentIndex(model->index(0, 0, listView->rootIndex()));
QTimer::singleShot(2000, this, SLOT(LightItUp2()));
}
void MainWindow::LightItUp2()
{
qDebug("LightItUp2");
listView->setRootIndex(model->index("/Users/anders/Downloads/Browser"));
listView->setCurrentIndex(model->index(0, 0, listView->rootIndex()));
QTimer::singleShot(2000, this, SLOT(LightItUp3()));
}
void MainWindow::LightItUp3()
{
qDebug("LightItUp3");
listView->setRootIndex(model->index("/Users/anders/Downloads"));
listView->setCurrentIndex(model->index(0, 0, listView->rootIndex()));
QTimer::singleShot(2000, this, SLOT(LightItUp4()));
}
void MainWindow::LightItUp4() …Run Code Online (Sandbox Code Playgroud) 我正在开发一个可排序的小型QlistView.
iListView = new QListView(this);
//Creating a standard item model
iStandardModel = new QStandardItemModel(this);
//First item
QStandardItem* item1 = new QStandardItem(QIcon(":/cover-story-album-art.jpg"),"First Item");
//Second item
QStandardItem* item2 = new QStandardItem(QIcon(":/cover-story-album-art.jpg"),"Second item");
//third item
QStandardItem* item3 = new QStandardItem(QIcon(":/cover-story-album-art.jpg"),"Third![enter image description here][1] item");
//Appending the items into model
iStandardModel->appendRow(item1);
iStandardModel->appendRow(item2);
iStandardModel->appendRow(item3);
//Setting the icon size
iListView->setIconSize(QSize(40,30));
//Setting the model
iListView->setModel(iStandardModel);
//Setting listview geometry
iListView->setGeometry(QRect(0,0,240,320));
iListView->setDragEnabled(true);
iListView->setAcceptDrops(true);
iListView->setDragDropMode(QAbstractItemView::InternalMove);
Run Code Online (Sandbox Code Playgroud)
好了拖放工作,但是如果我将项目放在除了列表末尾之外的任何其他项目上,则会有一个问题."拖动"项目将替换"已释放"项目.
QListView在不同场景下的屏幕截图

我正在开始 Qt/pySide 编程,并尝试以 QFileSystemModel 作为模型实现一个简单的 QListView。我已经完成了这项工作,并且还在模型上定义了一个名称过滤器。我想获取 QListView (或者更确切地说是底层模型)中所有文件的列表。
下面的代码似乎可以做到这一点,但是非常丑陋,而且不可能是正确的方法。帮助!
model = myQListView.model()
idx = model.index(model.rootPath())
for i in range(0, model.rowCount(idx)):
child = idx.child(i, idx.column())
print model.fileName(child)
Run Code Online (Sandbox Code Playgroud) 我有一个QListView,里面有5个项目.在我的QListView中说(美国,加拿大,丹麦,埃及,芬兰).现在我想为所有这些项目设置一个公共标题作为COUNTRIES.如何将标题设置为QListView.请帮忙.
当QListView中没有项目时,我想显示一些文本(如"无项目").
我试图覆盖QListView的paintEvent方法,但它没有任何效果.
我在QListView上使用QScroller.
如何在列表到达开头或结尾时停止拖动列表?
如下图所示.

我有一个使用 QTableView 和 QListView 的 Qt 应用程序。在两个witdgets 中我都显示了一些图标。
问题是,当用户选择其中一个条目时,Qt alpha 会混合图标上的选择,从而使图标显示的对比度较低且颜色略有不同。
我希望 Qt 首先绘制选区,然后在顶部绘制图标,这样无论是否选择它们,它们看起来都一样。我怎样才能做到这一点?
更新:
这就是我的问题:
使用白色矩形图标更容易识别:
当您使用图形编辑器检查颜色值时,您会看到颜色值发生变化。我希望 Qt 在没有此覆盖的情况下按原样绘制图标。
这里的 QListView 采用颜色渐变背景样式。但我对无样式的 QTableView 也有同样的问题。
顺便说一句,所有图标都是 SVG。
我有一个很大的日志数据(100、1000、100000、...记录),我想以下列方式将其可视化:
为了避免性能和内存问题,我应该使用哪个小部件(例如QListView, QListWidget)以及如何使用?