最近写活,要实现控件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)));
本文介绍如何在Qt中实现两个控件A和B的同步操作,通过自定义信号和槽函数,使得控件A拖动滚动条时,控件B也能够响应并同步移动。具体实现包括在B类中重载mouseMoveEvent函数,发送自定义信号,并在MainWindow中连接信号与槽函数。
4091

被折叠的 条评论
为什么被折叠?



