标签: qtableview

有没有办法保存列的顺序?

我目前有一个tableview附加到一个派生自QSortFilterProxyModel的类.现在我想知道是否有任何方法可以存储列的顺序,因为用户倾向于来回移动列.当用户更改列的顺序时,也会发出任何信号.我搜索这个但是找不到任何可能在移动列时向我发送信息以及如何保存tablew列命令的信号.任何建议都会受到赞赏

c++ qt qtableview qtgui

5
推荐指数
2
解决办法
1155
查看次数

QTableView中的搜索/查找功能

我有一个QWidget,里面有一个QTableView.我需要在表的第一列有一个查找功能,所以当我点击Ctrl + F时,会弹出一个查找对话框.

class Widget(QWidget):
    def __init__(self,md,parent=None):
        QWidget.__init__(self,parent)
        layout=QVBoxLayout(self)

        # initially construct the visible table
        tv = QTableView()
        # uncomment this if the last column shall cover the rest
        tv.horizontalHeader().setStretchLastSection(True)
        tv.show()

        # set black grid lines
        self.setStyleSheet("gridline-color: rgb(39, 42, 49)")

        # construct the Qt model belonging to the visible table
        model = NvmQtModel(md)
        tv.setModel(model)
        tv.resizeRowsToContents()
        tv.resizeColumnsToContents()

        # set the shortcut ctrl+F for find in menu
        shortcut = QShortcut(QKeySequence('Ctrl+f'), self)
        shortcut.activated.connect(self.handleFind)

        # delegate for decimal
        delegate = NvmDelegate()
        tv.setItemDelegate(delegate)
        self.setGeometry(200,200,600,600) # …
Run Code Online (Sandbox Code Playgroud)

python search qt pyqt qtableview

5
推荐指数
1
解决办法
2040
查看次数

如何通过单击选择QTableView行

当一个QTableViewQModelIndex被点击我要选择同一行的索引的一整行.

要做到这一点我连接QTableViewclicked信号到自定义viewClicked()该自动接收点击QModelIndex方法:

self.tableview=QTableView()
self.tableview.clicked.connect(self.viewClicked)
Run Code Online (Sandbox Code Playgroud)

viewClicked(self, clickedIndex)我查询clickedIndex的行号,其模型和列总数中:

    row=clickedIndex.row()
    model=clickedIndex.model()
    columnsTotal=model.columnCount(None)
Run Code Online (Sandbox Code Playgroud)

最后选择一行中的每个索引:

for i in range(columnsTotal): self.tableview.selectRow(row) 
Run Code Online (Sandbox Code Playgroud)

问题是Qt处理此类操作的速度明显缓慢.我想知道在单击其中一个tableview项时是否有更快的方法来选择整行索引:

在此输入图像描述

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

class Model(QAbstractTableModel):
    def __init__(self, parent=None, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.items = ['Row0_Column0','Row0_Column1','Row0_Column2']

    def flags(self, index):
        return Qt.ItemIsEnabled | Qt.ItemIsSelectable

    def rowCount(self, parent):
        return 1      
    def columnCount(self, parent):
        return len(self.items)  

    def data(self, index, role):
        if not index.isValid(): return QVariant()
        elif role …
Run Code Online (Sandbox Code Playgroud)

python qt model pyqt qtableview

5
推荐指数
1
解决办法
1万
查看次数

如何获取QTableView当前列及其排序方向

在此输入图像描述

此代码创建单个QTableView. 单击该列将显示指示列排序方向的箭头。单击 tableView 的项目本身会打印出单击的索引。单击 tableView 项时,我想知道三列(标题)中的哪一列是当前的(显示箭头的列)以及排序箭头指向的方向:向上或向下。如何实现这一目标?

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class Model(QtCore.QAbstractTableModel):
    def __init__(self):
        QtCore.QAbstractTableModel.__init__(self)
        self.items = [[1, 'one', 'ONE'], [2, 'two', 'TWO'], [3, 'three', 'THREE']]

    def rowCount(self, parent=QtCore.QModelIndex()):
        return 3 
    def columnCount(self, parent=QtCore.QModelIndex()):
        return 3

    def data(self, index, role):
        if not index.isValid(): return 

        if role in [QtCore.Qt.DisplayRole, QtCore.Qt.EditRole]:
            return self.items[index.row()][index.column()]

def onClick(index):
    print 'clicked index:  %s'%index

def sortIndicatorChanged(column=None, sortOrder=None):
    print 'sortIndicatorChanged: column: %s, sortOrder: %s'%(column, sortOrder)

tableModel=Model()
tableView=QtGui.QTableView() 
tableView.setModel(tableModel)
tableView.setSortingEnabled(True)
tableView.clicked.connect(onClick)
tableView.horizontalHeader().sortIndicatorChanged.connect(sortIndicatorChanged)
tableView.show() …
Run Code Online (Sandbox Code Playgroud)

python qtableview qabstracttablemodel

5
推荐指数
0
解决办法
1153
查看次数

如何将 QTableView 滚动条位置更改为标题下方?

如何更改滚动条位置从旁边到标题

在此输入图像描述

到下面的标题?

在此输入图像描述

任何如何实现这一点的想法都值得赞赏。

qt qtableview qscrollarea qt5

5
推荐指数
1
解决办法
1707
查看次数

如何防止 Qt 对 QListView 中的图标进行 alpha 混合选择?

我有一个使用 QTableView 和 QListView 的 Qt 应用程序。在两个witdgets 中我都显示了一些图标。

问题是,当用户选择其中一个条目时,Qt alpha 会混合图标上的选择,从而使图标显示的对比度较低且颜色略有不同。

我希望 Qt 首先绘制选区,然后在顶部绘制图标,这样无论是否选择它们,它们看起来都一样。我怎样才能做到这一点?

更新:

这就是我的问题:

与普通图标的效果

使用白色矩形图标更容易识别:

带有白色矩形图标的效果

当您使用图形编辑器检查颜色值时,您会看到颜色值发生变化。我希望 Qt 在没有此覆盖的情况下按原样绘制图标。

这里的 QListView 采用颜色渐变背景样式。但我对无样式的 QTableView 也有同样的问题。

顺便说一句,所有图标都是 SVG。

c++ qt qtableview qlistview

5
推荐指数
1
解决办法
539
查看次数

修改 QTableView PYQT5 中的单元格

我想修改给定 QTableView 中的任何单元格(标题除外)。以下是我的原始代码,不允许进行任何更改:

import sys
import csv
from datetime import datetime, timedelta
import calendar
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sqlite3
from pandas import DataFrame

class TBWindow(QMainWindow):
    def __init__(self, parent=None):
        super(TBWindow, self).__init__(parent)

        sql = "select * from stock"
        args = []

        conn = sqlite3.connect('DataBase.db')
        c = conn.cursor()
        c.execute(sql,args)
        data = c.fetchall()
        names = list(map(lambda x: x[0], c.description))
        c.close()
        conn.close()
        data = DataFrame(data, columns = names)

        MenuBar = self.menuBar()
        saveFile = QAction("&Save File", self) …
Run Code Online (Sandbox Code Playgroud)

python qtableview python-3.x pyqt5

5
推荐指数
1
解决办法
6007
查看次数

如何仅使用 CSS 对齐 Qt 中 QTableView 标题中的文本?

我尝试了 CSS 代码:

QTableView QHeaderView::section {
    text-align: center;
 }
Run Code Online (Sandbox Code Playgroud)

它没有帮助我。

PS 我在使用 Qt 的 WinCC OA 中编写 SCADA 系统,在那里您可以仅使用 CSS 更改组件的外观

qt qtableview qheaderview qtstylesheets

5
推荐指数
1
解决办法
1481
查看次数

QAbstractTableModel 编辑而不清除单元格中的先前数据

我创建了一个基于 QAbstractTableModel 的模型,允许用户编辑该模型中的数据。该模型显示在 QMainWindow 中的 QTableView 中。到目前为止,在我的模型中,我能够使单元格可编辑,并在编辑完成后保存用户输入的任何内容。

问题是当用户开始编辑时,它会“清除”该单元格的先前内容。因此,例如,如果我只想更改单元格中字符串的拼写,则必须重新键入整个值。我希望在编辑时编辑器将从模型中已有的数据开始,而不是空的。

我怎样才能做到这一点?

问题示例:

在我开始编辑单元格之前:

编辑前

我一开始编辑,单元格就是空的。我希望它以模型中已有的先前值作为星标:

一旦开始编辑

这是我的模型的最小示例。我的实际模型要大得多,并且使用结构而不是 QVariants 的二维数组来存储数据。

标题:

const int COLS= 2;
const int ROWS= 6;

class EditableTableModel : public QAbstractTableModel
{
    Q_OBJECT

private:
    QVariant tableData[ROWS][COLS];

public:
    EditableTableModel(QObject *parent = nullptr);
    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
    int columnCount(const QModelIndex &parent = QModelIndex()) const override;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
    QVariant headerData(int section, …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtableview qabstracttablemodel qt5

5
推荐指数
1
解决办法
1302
查看次数

在 PyQt5 中,如何使用拖放正确移动 QTableView 中的行

我(只是)希望能够使用QTableView拖放机制来移动现有行。我找到了很多资源(例如,这里这里这里),它们描述了拖放,插入等的某些方面,但我仍在努力使其适合我的情况。

这是我正在寻找的解决方案应该具备的功能:

  • 处理“Qt-free”数据结构,例如元组列表。
  • 对数据结构进行操作。即,当视图中的项目顺序被修改时,应该在数据结构中修改它
  • 标准拖放启用列表的外观和感觉:
    • 选择/移动整行
    • 显示整条线的下降指示器
  • 诸如删除/编辑单元格之类的进一步操作仍然必须是可能的,即不会被拖放方法所触及

本教程展示了一个非常接近我需要的解决方案,但它使用了一个QStandardItemModel而不是QAbstractTableModel对我来说看起来半优化的解决方案,因为我必须基于(我是对的吗?)QStandardItem需要的“镜像”数据结构进行操作。QStandardItemModel

下面附加了代表我当前进度的代码。

目前我看到两种可能的方法:

方法 1:实现QAbstractTableModel并实现所有需要的事件/槽以修改底层数据结构: * 优点:最通用的方法 * 优点:没有冗余数据 * 缺点:我不知道如何获知已完成的拖放操作以及什么索引移到了哪里

在我附加的代码中,我跟踪了我所知道的所有相关方法并打印出所有参数。这是将第 2 行拖到第 3 行时得到的结果

dropMimeData(data: ['application/x-qabstractitemmodeldatalist'], action: 2, row: -1, col: -1, parent: '(row: 2, column: 0, valid: True)')
insertRows(row=-1, count=1, parent=(row: 2, column: 0, valid: True))
setData(index=(row: 0, column: 0, valid: True), value='^line1', role=0)
setData(index=(row: 0, column: …
Run Code Online (Sandbox Code Playgroud)

drag-and-drop pyqt qtableview python-3.x

5
推荐指数
1
解决办法
2392
查看次数