我有两个小部件,它们的滚动分别控制。每个小部件的ScrollBarPolicy — ScrollBarAsNeeded。
还有一个复选框,该复选框应同步两个小部件的滚动(水平)。我想滚动其中一个,第二个也应该滚动。如何实现?
我也想实现一种情况,当我滚动第一个小部件时,第二个也将滚动,但是直接滚动第二个小部件应该是不可能的。
答案 0 :(得分:0)
对于情况1:
假设您的窗口小部件是自定义窗口小部件,如果不派生它们,则制作自定义窗口小部件,并为窗口小部件1添加一个自定义信号,例如ScrollEvent,并将该信号连接到窗口小部件2中的自定义插槽,例如ScrollUpdate。为widget1安装eventfiter,然后在eventfilter中注意QScrollEvent,当事件发生时发出您的自定义信号。在widget2的插槽中,滚动到widget1的位置。
对于情况2:
实现与case1相同的操作。除此之外,请使用以下代码
ui->your_widget2->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
这使滚动条消失,因此用户无法直接滚动。
答案 1 :(得分:0)
在第二个对象的构造函数中,实现了两种具有就绪信号和QScrollArea
槽的方法:
connect(parentScrollArea->horizontalScrollBar(),
SIGNAL(valueChanged(int)),
relatedDiagram->parentScrollArea->horizontalScrollBar(),
SLOT(setValue(int)));
connect(relatedDiagram->parentScrollArea->horizontalScrollBar(),
SIGNAL(valueChanged(int)),
parentScrollArea->horizontalScrollBar(),
SLOT(setValue(int)));
我决定不禁用第二个对象的直接滚动。
在同步方式中,我添加了同步方式:
connect(commonArea->horizontalScrollBar(),
SIGNAL(valueChanged(int)),
resultsArea->horizontalScrollBar(),
SLOT(setValue(int)));
connect(resultsArea->horizontalScrollBar(),
SIGNAL(valueChanged(int)),
commonArea->horizontalScrollBar(),
SLOT(setValue(int)));
和不同步:
disconnect(commonArea->horizontalScrollBar(),
SIGNAL(valueChanged(int)),
resultsArea->horizontalScrollBar(),
SLOT(setValue(int)));
disconnect(resultsArea->horizontalScrollBar(),
SIGNAL(valueChanged(int)),
commonArea->horizontalScrollBar(),
SLOT(setValue(int)));