как реализовать индивидуальные для сигналов прорисовки виджета?
class MyWidget : public QWidget
{
Q_OBJECT
public:
enum State { State1, State2 };
public slots:
void setState( int st )
{
m_state = st;
update();
}
protected:
virtual void paintEvent( QPaintEvent * )
{
QPainter p( this );
switch( m_state )
{
case State1:
// Рисуем состояние 1
case State2:
// Рисуем состояние 2
}
}
private:
int m_state;
};
class MyWidget : public QWidget
{
Q_OBJECT
public:
enum State { State1, State2 };
public slots:
void setState( int st )
{
m_state = st;
update();
}
protected:
virtual void paintEvent( QPaintEvent * )
{
QPainter p( this );
switch( m_state )
{
case State1:
// Рисуем состояние 1
case State2:
// Рисуем состояние 2
}
}
private:
int m_state;
};
Я создал приложение вкотором на доке 4 кнопки а в центре виджет widget для рисования
Вот что у меня получилось но выскакивает ошибка что множственное определение (multiple definition) и показывается код который преобразовал компилятор COM
вот mainwindow.cpp -
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
curr_direct= down;
connect(ui->Up,SIGNAL(Clicked),this,SIGNAL(pUp()));
connect(ui->Down,SIGNAL(Clicked),this,SIGNAL(pDown()));
connect(ui->Left,SIGNAL(Clicked),this,SIGNAL(pLeft()));
connect(ui->Right,SIGNAL(Clicked),this,SIGNAL(pRight()));
}
void MainWindow::pUp(){
curr_direct= up;
update();
};
также реализуются кнопки вниз налево направо.
void MainWindow::paintEvent(QPaintEvent*){
switch (curr_direct){
case up:
where2paint->Up();
break;
case down:
where2paint->Down();
break;
case left:
where2paint->Left();
break;
case right:
where2paint->Right();
break;
};
};
//.......
widget.cpp -
Widget::Widget(QWidget *parent):QWidget(parent)
{
painter= new QPainter(this);
pen= new QPen;
pen->setColor(Qt::red);
pen->setWidth(5);
painter->setPen(*pen);
*curr_point= QPoint(0,0);
}
void Widget::Up(){
painter->drawLine(*curr_point,(*curr_point+= QPoint(curr_point->x(),curr_point->y()- 5)));
};
также реализуются кнопки вниз налево и направо.
/......
Первое, что бросается в глаза - это:
спасибо за советы. После исправлений все заработало но возникла другая проблема(про которую я забыл) - рисунок после перерисовки стирался и приходилось заново все рисовать - может есть смысл рисовать используя QCanvas может он более для этого удобен?
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)