gpt4 book ai didi

c++ - 如何同步两个QListWidget的滚动?

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:16 24 4
gpt4 key购买 nike

有两个 QListWidget 具有相同的项目数。如何同步它们的滚动?

我的意思是当我滚动其中一个时,另一个应该得到相同的滚动。

最佳答案

假设您的UI 中有两个QListWidget 元素listWidget_1listWidget_2,那么您可以使用valueChanged/setValue 信号/插槽对连接两个列表小部件的垂直 slider ,事实上,我没有发现任何信号在这种“双向”连接中重新反弹的问题,因为最终这两个值将相同,我认为不会发出更多信号,因此您可以设置足够的连接:

    connect(this->ui->listWidget_1->verticalScrollBar(), &QScrollBar::valueChanged,
this->ui->listWidget_2->verticalScrollBar(), &QScrollBar::setValue);
connect(this->ui->listWidget_2->verticalScrollBar(), &QScrollBar::valueChanged,
this->ui->listWidget_1->verticalScrollBar(), &QScrollBar::setValue);
// test lists:
QList<QString> lw11, lw22;
for (int x=0; x <200; x++){
lw11.append("ListWidget1_" + QVariant(x).toString());
lw22.append("The Other lw is at: " + QVariant(x).toString());
}
this->ui->listWidget_1->addItems(lw11);
this->ui->listWidget_2->addItems(lw22);

如果信号反弹无论如何都应该被阻止,那么可以通过添加一个 slot 来调整模型来处理两个小部件的滚动并将它们都连接到那个插槽:

    connect(this->ui->listWidget_1->verticalScrollBar(),&QScrollBar::valueChanged
, this, &MainWindow::handleScroll);
connect(this->ui->listWidget_2->verticalScrollBar(),&QScrollBar::valueChanged
, this, &MainWindow::handleScroll);

插槽逻辑可以是:

void MainWindow::handleScroll(int value)
{
// Logic for detecting sender() can be used ... but I don't see it's important
// fast way to check which listWidget emitted the signal ...
if (this->ui->listWidget_1->verticalScrollBar()->value() == value){
qDebug() << "lw1 is in charge ...............";
disconnect(this->ui->listWidget_2->verticalScrollBar(), &QScrollBar::valueChanged,this, &MainWindow::handleScroll); // prevent signal rebounce from the other lw
this->ui->listWidget_2->verticalScrollBar()->setValue(value);
connect(this->ui->listWidget_2->verticalScrollBar(), &QScrollBar::valueChanged,this, &MainWindow::handleScroll);

}else{
qDebug() << "lw2 is in charge ...............";
disconnect(this->ui->listWidget_1->verticalScrollBar(), &QScrollBar::valueChanged,this, &MainWindow::handleScroll);
this->ui->listWidget_1->verticalScrollBar()->setValue(value);
connect(this->ui->listWidget_1->verticalScrollBar(), &QScrollBar::valueChanged,this, &MainWindow::handleScroll);
}
}

关于c++ - 如何同步两个QListWidget的滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49337721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com