class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget( QWidget* parent = 0, const char* name = 0 );
~MyWidget();
protected:
virtual void paintEvent( QPaintEvent* event );
};
.cppファイルをつくる
#include <QPainter.h>
#include "MyWidget.h"
MyWidget::MyWidget( QWidget* parent, const char* name )
: QWidget( parent, name )
{
}
MyWidget::~MyWidget()
{
}
void MyWidget::setProperty( const QString& key, int value )
{
if ( key == "mRow" ) {
mRow = value;
} else if ( key == "mColumn" ) {
mColumn = value;
}
}
void MyWidget::paintEvent( QPaintEvent* event )
{
QPainter p( this );
p.drawLine( 0, 0, 100, 100 );
...
}
designerで Tools -> Custom -> Edit Custom Widgets... New Widget、Class, Headerfile、Signals, Slots, Propertiesなどを設定する PropertiesにmRow, mColumnをIntで追加する
Property Tools -> Custom -> Edit Custom Widgets... Propertesに追加 ???.cppのコンストラクタでsetProperty( "...", xxx );が呼ばれる Widget側でpublic: void setProperty( const QString& key, int value );などを実装する
キーイベント protected: virtual void keyPressEvent( QKeyEvent* event );をオーバーライド 矢印キーはevent->key()の値がQt::Key_Right, Qt::Key_Left, Qt::Key_Up, Qt::Key_Down
マウスイベント protected: virtual void mousePressEvent( QMouseEvent* event ); 以後マウスを追跡するにはここでgrabMouse(); virtual void mouseReleaseEvent( QMouseEvent* event ); grabMouse()している場合はreleaseMouse()する virtual void mouseMoveEvent( QMouseEvent* event ); ボタンを押している間しか発生しない
マウスのローカル座標はevent->pos()