Qt / PyQt: Как вручную нарисовать каретку? - PullRequest
2 голосов
/ 09 декабря 2011

Я знаю позицию в QWidget, где я хотел бы нарисовать каретку.

  1. Вызов краски перерисовывает весь виджет, и я хочу перерисовать только один «ящик», содержащий курсор / символ. Есть ли способ сказать это не стирать весь виджет?

  2. Как создать таймер, который заставит его мигать (даже когда программа делает что-то еще)?

Я хочу сделать это вручную, а не через QTextLayout.

1 Ответ

4 голосов
/ 11 декабря 2011

QWidget имеет метод repaint () для перерисовки только определенной части виджета

QWidget.repaint (self, int x, int y, int w, int h)
QWidget.repaint (self, QRect)
QWidget.repaint (self, QRegion)

Вы можете создать QTimer, который будет запускаться с интервалами:

timer = QtCore.QTimer()
timer.timeout.connect(doBlinkMethod)
timer.start(1000) # every second

def doBlinkMethod():
    print "blah"

Вы можететакже реализуйте свой встроенный таймер виджетов, чтобы просто действовать на себя: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qobject.html#startTimer

...