【问题标题】:Implement a userEdited signal to QDateTimeEdit?向 QDateTimeEdit 实施 userEdited 信号?
【发布时间】:2010-09-22 04:37:56
【问题描述】:

QLineEdit 有一个textEdited 信号,每当用户交互更改文本时都会发出该信号,但不会在以编程方式更改文本时发出。但是,QDateTimeEdit 只有一个通用的dateTimeChanged 信号,不区分这两种类型的变化。由于我的应用程序依赖于知道该字段是否由用户编辑,因此我正在寻找实现它的方法。

我(目前正在工作)的策略是为编辑字段创建一个eventFilter,拦截按键和鼠标滚轮事件并使用它们来确定该字段是否被用户修改(将此信息存储在对象中),最后将dateTimeChanged 信号连接到一个函数,该函数决定更改是由用户完成还是以编程方式完成。以下是代码的相关部分(python):

class UserFilter(QObject):
    def __init__(self, parent):
        QObject.__init__(self, parent)
        self.parent = parent

    def eventFilter(self, object, event):
        if event.type() == QEvent.KeyPress or event.type() == QEvent.Wheel:
            self.parent.edited = True
        else:
            pass
        return False


class DockThumb(QWidget):
    def __init__(self, parent):
        QWidget.__init__(self, parent)
        self.parent = parent

        self.edited = False

        self.dateedit = QDateTimeEdit(self)

        self.userfilter = UserFilter(self)
        self.dateedit.installEventFilter(self.userfilter)
        ...

    self.connect(self.dateedit,
            SIGNAL('dateTimeChanged(QDateTime)'),
            self.edited_or_not)

    def edited_or_not(self):
        if self.edited:
            # User interacted! Go for it.
            self.parent.runtimer()
            # self.edited returns to False once data is saved.
        else:
            # User did not edited. Wait.
            pass

有没有更客观的方法呢?我尝试对QDateTimeEdit 进行子类化,但未能处理事件...预期的用户交互是直接键入、向上/向下箭头键旋转日期和复制/粘贴整个字符串。

【问题讨论】:

    标签: python qt pyqt4 signals


    【解决方案1】:

    实现这一点的惯用 Qt 方法确实是继承 QDateTimeEdit 并添加您需要的功能。我知道您尝试过并且“无法处理事件”,但这是一个单独的问题,也许您应该描述这些问题 - 因为它们应该是可以解决的。

    【讨论】:

      【解决方案2】:

      由于我不完全确定您要做什么,我同意 Eli Bendersky 的观点。除此之外,如果您知道何时以编程方式更改 QDateTimeEdit,请设置一些标志,您可以在插槽处理程序中检查该标志,以指示正在发生编程更改,并在完成后将其清除。

      【讨论】:

        猜你喜欢
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-23
        • 2015-05-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        相关资源
        最近更新 更多