多态其实就使用基类的指针,调用派生类里重新实现的虚函数.
在QT的类里我们用到的都是虚函数, 没有纯虚函数.
QT类里虚函数都是protected的权限.
而且在QT里,虚函数在什么场合,什么时机下会被调用,都已经写好的了。我们只要重新实现虚函数,在相应的场合下就会被调用到。
QWidget的虚函数:
Protected Functions
virtual void actionEvent(QActionEvent *event)
virtual void changeEvent(QEvent *event)
virtual void closeEvent(QCloseEvent *event)
virtual void contextMenuEvent(QContextMenuEvent *event)
virtual void dragEnterEvent(QDragEnterEvent *event)
virtual void dragLeaveEvent(QDragLeaveEvent *event)
virtual void dragMoveEvent(QDragMoveEvent *event)
virtual void dropEvent(QDropEvent *event)
virtual void enterEvent(QEvent *event)
virtual void focusInEvent(QFocusEvent *event)
virtual bool focusNextPrevChild(bool next)
virtual void focusOutEvent(QFocusEvent *event)
virtual void hideEvent(QHideEvent *event)
virtual void inputMethodEvent(QInputMethodEvent *event)
virtual void keyPressEvent(QKeyEvent *event)
virtual void keyReleaseEvent(QKeyEvent *event)
virtual void leaveEvent(QEvent *event)
virtual void mouseDoubleClickEvent(QMouseEvent *event)
virtual void mouseMoveEvent(QMouseEvent *event)
virtual void mousePressEvent(QMouseEvent *event)
virtual void mouseReleaseEvent(QMouseEvent *event)
virtual void moveEvent(QMoveEvent *event)
virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result)
virtual void paintEvent(QPaintEvent *event)
virtual void resizeEvent(QResizeEvent *event)
virtual void showEvent(QShowEvent *event)
virtual void tabletEvent(QTabletEvent *event)
virtual void wheelEvent(QWheelEvent *event)
例如通过重写虚函数(keyPressEvent)接收用户的键盘输入.
#include <QApplication>
#include <QWidget>
#include <QKeyEvent>
#include <QDebug>
class MyWid : public QWidget {
public:
void keyPressEvent(QKeyEvent *e);
};
void MyWid::keyPressEvent(QKeyEvent *e)
{
qDebug() << e->text();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWid wid;
wid.show();
return a.exec();
}