第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 QTableWidget 編輯狀態(tài)下的單元格大小增加到超過行大小?

如何將 QTableWidget 編輯狀態(tài)下的單元格大小增加到超過行大???

一只名叫tom的貓 2023-12-29 16:45:26
我想知道當我嘗試像上圖那樣修復單元格時,是否可以增加單元格大小而不影響行大小。
查看完整描述

1 回答

?
拉莫斯之舞

TA貢獻1820條經(jīng)驗 獲得超10個贊

人們可以通過 QStyledItemDelegate 使用自定義編輯器,例如多個組件和定義的最小大小。

所以基本上你會:

  • 表模型(QAbstractTableModel 的子類)

  • 定義了帶有 Qt.ItemIsEditable 的標志

  • 對于帶有標簽的列,您可以通過 setItemDelegateForColumn 設置自己的委托

  • 該委托繼承自 QStyledItemDelegate

  • 覆蓋 createEditor 并返回您的自定義編輯器

  • 重寫 updateEditorGeometry 以設置自定義編輯器的大小和位置

  • 相應地實現(xiàn) setEditorData 和 setModelData

  • 如果您想要一個額外的按鈕來關閉編輯狀態(tài),請使用QApplication.postEvent(self, QKeyEvent(QKeyEvent.KeyPress, Qt.Key_Enter, Qt.NoModifier))

演示

顯示兩個 QLineEdit 元素和一個用于更改單元格文本和背景顏色的按鈕的小示例可能如下所示:

https://img1.sycdn.imooc.com/658e875b0001713b03980380.jpg

可以看到,QTableWidget編輯狀態(tài)下自定義編輯器的高度大于行高。

完整、獨立的 PySide2 示例

代碼可能如下所示:

import sys

from PySide2 import QtWidgets, QtCore

from PySide2.QtCore import Qt, QSize

from PySide2.QtGui import QColor, QKeyEvent

from PySide2.QtWidgets import QLineEdit, QPushButton, QVBoxLayout, QApplication



class MyDelegate(QtWidgets.QStyledItemDelegate):

    def __init__(self, parent=None):

        QtWidgets.QStyledItemDelegate.__init__(self, parent)


    def createEditor(self, parent, option, index):

        return CustomEditor(parent)


    def updateEditorGeometry(self, editor, option, index):

        # adjust position if close to border

        editor.setGeometry(option.rect)


    def paint(self, painter, option, index):

        (text, bgColor) = ('', '')

        data = index.data()

        if type(data) == tuple and len(data) > 1:

            (text, bgColor) = data

        painter.setBrush(QColor(bgColor))

        painter.drawRect(option.rect)

        painter.setPen(QColor(255, 255, 255))

        painter.drawText(option.rect, QtCore.Qt.AlignCenter, text)


    def setEditorData(self, editor, index):

        data = index.data()

        if type(data) == tuple and len(data) > 1:

            (text, bgColor) = index.data()

            editor.edit1.setText(text)

            editor.edit2.setText(bgColor)


    def setModelData(self, editor, model, index):

        model.setData(index, (editor.edit1.text(), editor.edit2.text()))



class CustomEditor(QtWidgets.QWidget):


    def __init__(self, parent):

        QtWidgets.QWidget.__init__(self, parent)

        self.edit1 = QLineEdit()

        self.edit2 = QLineEdit()

        self.button = QPushButton("close")

        layout = QVBoxLayout()

        layout.addWidget(self.edit1)

        layout.addWidget(self.edit2)

        layout.addWidget(self.button)

        self.setLayout(layout)

        self.button.clicked.connect(self.saveAndClose)

        self.setAutoFillBackground(True)

        self.setMinimumSize(QSize(128, 128))


    def saveAndClose(self):

        QApplication.postEvent(self, QKeyEvent(QKeyEvent.KeyPress, Qt.Key_Enter, Qt.NoModifier))



class Model(QtCore.QAbstractTableModel):

    def __init__(self):

        QtCore.QAbstractTableModel.__init__(self)

        self.colorData = [('abc', '#173f5f'),

                          ('def', '#20639b'),

                          ('ghi', '#3caea3'),

                          ('red', '#ff0000'),

                          ('mno', '#ed553b')]


    def rowCount(self, parent):

        return len(self.colorData)


    def columnCount(self, parent):

        return 2


    def data(self, index, role):

        if role == Qt.DisplayRole or role == Qt.EditRole:

            return self.colorData[index.row()]

        return None


    def setData(self, index, value, role=None):

        if role != Qt.EditRole:

            self.colorData[index.row()] = value

            self.dataChanged.emit(index, index)

            return True

        return False


    def flags(self, index):

        return Qt.ItemIsEnabled | Qt.ItemIsEditable



class TableView(QtWidgets.QWidget):

    def __init__(self, parent=None):

        QtWidgets.QWidget.__init__(self, parent)

        tableModel = Model()

        tableView = QtWidgets.QTableView()

        tableView.setModel(tableModel)

        mydelegate = MyDelegate(self)

        tableView.setItemDelegateForColumn(1, mydelegate)


        hbox = QtWidgets.QHBoxLayout()

        hbox.addWidget(tableView)

        self.setLayout(hbox)



if __name__ == "__main__":

    app = QApplication(sys.argv)

    tableView = TableView()

    tableView.setMinimumSize(QSize(400, 360))

    tableView.show()

    sys.exit(app.exec_())


查看完整回答
反對 回復 2023-12-29
  • 1 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號