【问题标题】:Get cells of QCalendarWidget获取 QCalendarWidget 的单元格
【发布时间】:2016-02-26 05:12:21
【问题描述】:

目前我正在用 QT 编写一个日历程序。我的主窗口有一个QCalendarWidget,现在我想听单元格的双击事件。我的问题是我不知道如何获得一个单元格(它是QCalendarWidget 的一个孩子),所以我可以向它添加一个事件侦听器。与:

calendarWidget.findChildren(QtCore.QObject)

我可以获取 Widget 的所有子项,但我不知道如何识别单元格。你有什么想法我可以做到这一点吗?

【问题讨论】:

  • 您使用的是哪个版本的 Qt?
  • 哦抱歉忘记了 - 我使用的是 Qt 4.8

标签: qt pyqt


【解决方案1】:

日历小部件包含一个QTableView,因此您可以获得对它的引用并查询其内容。

下面的演示在表格上安装了event-filter 以获得双击,因为表格的doubleClicked 信号被日历禁用(大概是为了防止编辑单元格)。

from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.calendar = QtGui.QCalendarWidget(self)
        self.table = self.calendar.findChild(QtGui.QTableView)
        self.table.viewport().installEventFilter(self)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.calendar)

    def eventFilter(self, source, event):
        if (event.type() == QtCore.QEvent.MouseButtonDblClick and
            source is self.table.viewport()):
            index = self.table.indexAt(event.pos())
            print('row: %s, column: %s, text: %s' % (
                  index.row(), index.column(), index.data()))
        return super(Window, self).eventFilter(source, event)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(750, 250, 300, 300)
    window.show()
    sys.exit(app.exec_())

【讨论】:

  • 哇,非常感谢您的帮助,效果很好。您从哪里获得有关 QTable 的信息?您是否了解过 QCalendarWidget 源代码?
  • 发件人:print(self.calendar.children())
猜你喜欢
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 2010-12-28
  • 2012-01-02
相关资源
最近更新 更多