标签: qtableview

QTableView中,什么“信号”触发编辑模式

我正在尝试从 QTableView 编写一些继承类(我们称之为 A),并希望覆盖插槽

void 编辑(常量 QModelIndex 和索引)

来自 QAbstractItemView。我知道这个函数可以触发编辑模式,但我的问题是:我希望每当用户在 A 类中触发编辑模式时,程序都可以进入被覆盖的槽A::edit

不过好像只有直接调用A::edit,程序才能进入。

由于 QTableView 来自 QAbstractItemView,如果通过其他方式(例如鼠标双击)触发编辑模式,程序将运行默认的QAbstractItemView::edit而不是A::edit

我尝试连接“已激活”信号,但显然这不是触发编辑模式的正确信号。每次编辑器被触发时是否都要做一些事情?

另外,我想在编辑模式结束时通过按 Enter 或 ESC 或鼠标单击其他位置来执行一些操作。同样的情况也发生在插槽上

void editorDestroyed ( QObject * 编辑器 )

谁能帮我解决这个问题?我将非常感激,谢谢!

inheritance qt qt4 signals-slots qtableview

2
推荐指数
1
解决办法
3548
查看次数

粘贴在QTableView的字段中

我需要在 python 中实现一个函数,该函数在按下“ctrl+v”时处理“粘贴”。我有一个QTableView,我需要复制表格的一个字段并将其粘贴到表格的另一个字段中。我尝试了以下代码,但问题是我不知道如何读取 tableView 中复制的项目(从剪贴板)。(因为它已经复制了该字段,我可以将其粘贴到其他任何地方,例如记事本)。这是我尝试过的代码的一部分:

class Widget(QWidget):
def __init__(self,md,parent=None):
  QWidget.__init__(self,parent)
   # initially construct the visible table
  self.tv=QTableView()
  self.tv.show()

  # set the shortcut ctrl+v for paste
  QShortcut(QKeySequence('Ctrl+v'),self).activated.connect(self._handlePaste)

  self.layout = QVBoxLayout(self)
  self.layout.addWidget(self.tv)

# paste the value  
def _handlePaste(self):
    if self.tv.copiedItem.isEmpty():
        return
    stream = QDataStream(self.tv.copiedItem, QIODevice.ReadOnly)
    self.tv.readItemFromStream(stream, self.pasteOffset)
Run Code Online (Sandbox Code Playgroud)

python qt pyqt paste qtableview

2
推荐指数
1
解决办法
2799
查看次数

QTableView 行样式

我有一个 QTableView 组件,在行中显示多种类型的数据。我需要的是用不同的颜色显示每种类型的行。我的样式表如下所示:

RecordSheet::item {
        border: 0px;
        color: black;
        padding: 1px 0px 0px 3px;
}
RecordSheet::item:selected, RecordSheet::item:selected:!active {
        background-color: #e8b417;
        color: black;
}
Run Code Online (Sandbox Code Playgroud)

我有两个想法如何实现这一目标:

  1. 使用data()模型中的方法并响应Qt::BackgroundColorRole。不幸的是,当我这样做时,背景颜色将被忽略,直到我border: 0px;从样式表中删除背景颜色,并且当我删除边框时,styleshhet 的填充将被忽略。奇怪的...

  2. 为每种类型的行设置 CSS/QSS 类,并在样式表中设置它们的颜色。然后使用模型为每种类型的行分配适当的类。所以样式表看起来像这样:

    RecordSheet::item {
        border: 0px;
        color: black;
        padding: 1px 0px 0px 3px;
    }
    RecordSheet::item[class=green_row] {
            background-color: green;
    }
    RecordSheet::item[class=red_row] {
            background-color: red;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    我更喜欢这种方法,因为它将内容与外观分开,但我不知道该怎么做。也许使用 ItemDelegate?

请问,有人知道一个好的简单的解决方案吗?

亲切的问候和非常感谢。

c++ qt qtableview qtstylesheets qt5.2

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

如何让QTableView只有双击才能进入编辑模式

设置Qt.ItemIsEnabled标志使QTableView项目可编辑。要进入项目的编辑模式,用户只需双击它即可。编辑项目的另一种方法是选择它并按下键盘键。如何禁用进入项目编辑模式的第二种方式?

这是显示选中项目的 QTableView 的图像:

在此处输入图片说明

只要用户按下键盘键,所选项目就已处于编辑模式:

在此处输入图片说明

这种默认的 QTableView 行为使得无法定义功能快捷方式,因为 QListView 的项目没有触发链接到快捷方式的功能,而是进入编辑模式......如何让 QTableView 仅在双击时进入编辑模式?

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 = ['Item_A_001','Item_A_002','Item_B_001','Item_B_002']

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

    def data(self, index, role):
        if not index.isValid(): return QVariant()
        elif role != Qt.DisplayRole:
            return QVariant()

        row=index.row()
        if row<len(self.items):
            return QVariant(self.items[row])
        else:
            return QVariant()
    def flags(self, index):
        return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable …
Run Code Online (Sandbox Code Playgroud)

python model pyqt qtableview

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

PyQt4 - QTableView - 如何循环 QTableView

我试图在 python 中找到一个示例,我可以在其中循环 QTableView 的模型元素并打印整行。我已经找到了如何循环选定的行,但当未选择行时什么也没有。

有人能帮我吗?无需告诉我如何创建模型以及如何将其应用到 QTableModel。我只感兴趣如何迭代行。

python qtableview pyqt4

2
推荐指数
1
解决办法
2508
查看次数

禁用编辑并将项目设置为 QTableWidget 中的多行

| Name | Math | Physics | Average grade |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

  1. “数学”和“物理”栏供用户输入数字,“平均”栏不能输入数值,它仅用于显示用户输入“数学”和“物理”成绩后的平均值。如何禁用编辑但仍在“平均值”列中显示计算值?

  2. 我想将内容写入多行,但我的代码不起作用

    ui->tableWidget->setColumnCount(4);
    ui->tableWidget->setRowCount(8);
    ui->tableWidget->setSortingEnabled(false);
    QTableWidgetItem *newItem = new QTableWidgetItem(tr("Hello World"));
    for (int i=0; i< ui->tableWidget->rowCount(); i++)
        ui->tableWidget->setItem(i, 0, newItem);
    
    Run Code Online (Sandbox Code Playgroud)

有一条消息是这样的

QTableWidget: cannot insert an item that is already owned by another QTableWidget
Run Code Online (Sandbox Code Playgroud)

我还是不明白,因为我是QT的新手。请帮助我,非常感谢!:)

更新代码:

for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

qt qtableview qtablewidget

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

QT - 是否可以在 QTableView 中为单元格的一半着色?

我想如果可能的话,它会涉及重新实现实际将颜色绘制到单元格中的函数,或者创建某种委托。

有人有这方面的经验吗?甚至有可能吗?

qt delegates qtableview

2
推荐指数
1
解决办法
920
查看次数

QTableView:动态更改 rowCount

我使用 aQTableView来显示只读数据。该模型基于QList包含另一个QList. 像这样的东西:

typedef struct
{
    int range;
    QString description;
} Field;

typedef struct
{
    QString name;
    QList<Field> fields;
} Item;

QList<Item> items;
Run Code Online (Sandbox Code Playgroud)

在我的QAbstractTableModel实现中,我有一个选择当前的插槽item

void setCurrentItem(int idx)
{
    // checks for errors (omissis)
    currentItemIdx = idx;

    // ask to redraw the table
    emit dataChanged(this->index(0, 0), this->index(rowCount(), columnCount()));
}
Run Code Online (Sandbox Code Playgroud)

模型的所有逻辑都依赖于该项目,例如:

int MyModel::rowCount(const QModelIndex&) const {
    return items.at(m_currentItemIdx).fields.count();
}

QVariant MyModel::data(const QModelIndex &index, int role) const {
    if (!index.isValid()) return QVariant();
    if …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtableview

2
推荐指数
1
解决办法
1511
查看次数

PyQt QTableView - 捕获 KeyDown / KeyPress 事件

我想Key Down捕获QTableView. 我还想确定,如果它是DEL按钮上的按键,我的QTableView创建方式如下(来自QtCreator):

self.tblview_data_sources = QtWidgets.QTableView(self.groupBox_2)
self.tblview_data_sources.setGeometry(QtCore.QRect(10, 20, 721, 121))
self.tblview_data_sources.setObjectName("tblview_data_sources")
Run Code Online (Sandbox Code Playgroud)

如果它实际上是 DEL 键按下,我想重新移动当前选择的行。

QTableView有这个方法keyPressEvent需要QKeyEvent- 我如何获得这个事件?

python pyqt qtableview qkeyevent pyqt5

2
推荐指数
1
解决办法
2436
查看次数

表格出现前的 QtableView 占位符文本

我有一个非常简单的 QtableView,它在程序运行后填充。该程序需要几秒钟才能像这样填充表格。

在此处输入图片说明

我想知道如何在程序运行之前在 QTableView 上启用占位符文本“无数据”......

在此处输入图片说明

python qtableview python-3.x pyside2

2
推荐指数
1
解决办法
96
查看次数