最近写活,要实现控件A拖动滚动条也能同步控件B。
lass A:public QWidget
{
Q_OBJECT
public:
explicit A(QWidget* parent=0);
protected:
void paintEvent(QPaintEvent*);
signals:
public slots:
};
class B:public QWidget
{
Q_OBJECT
public:
explicit B(QWidget* parent=0);
protected:
void paintEvent(QPaintEvent*);
void mouseMoveEvent(QMouseEvent *event) ;//鼠标移动事件
signals:
void MySignal(int m,int n,bool bPress); // 加入自定义信号
public slots:
};
oid B::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons()&Qt::LeftButton)
{
//鼠标左键按下并移动
// event返回的鼠标坐标为当前控件尺寸范围内的值
emit MySignal(mouseX,mouseX_up,true);
return;
}else if(event->buttons()&Qt::LeftButton)
{
// 鼠标右键按下移动"
}else if(event->buttons()&Qt::LeftButton)
{
// 鼠标中键按下移动
}
else
{
emit MySignal(event->x(),event->y(),false);// 没有按下鼠标任何键,只是移动鼠标
}
}
在MainWindow的构造函数中:
QHBoxLayout* hboxlayout=new QHBoxLayout;
QScrollArea* scrollarea1=new QScorllArea;
scrollarea1.setSpacing(5);
scrollarea1.setMargin(5);
QScrollArea* scrollarea2=new QScorllArea;
scrollarea2.setSpacing(5);
scrollarea2.setMargin(5);
A* a=new A;
B* b=new B;
scrollarea1.setWidget(a);
scrollarea2.setWidget(b);
connect((const QObject*)scrollarea1->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(horMoveR(int)));
connect((const QObject*)scrollarea2->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(horMoveL(int)));