Для моего GUI я хотел бы иметь две пары кнопок, которые прокручиваются вверх и вниз по прокрутке. Первый набор кнопок должен работать на say scrollarea1, а второй набор кнопок должен работать на scrollarea2. Виджеты, которые я помещал в scrollarea, называются viewport1 и viewport2. Поскольку оба набора кнопок должны делать то же самое (прокручивание вверх и вниз), я думал, что сделаю два слота под названием scrollUp и scrollDown, которые будут обрабатывать прокрутку для обоих наборов кнопок. К сожалению, я не могу выполнить эту работу и нуждаюсь в некоторой помощи. Я пробовал следующее:несколько сигналов для одного слота
QPushButton up;
QPushButton down;
QPushButton up2;
QPushButton down2;
connect(&up,SIGNAL(clicked()),&up,SLOT(scrollUp()));
connect(&up2,SIGNAL(clicked()),&up,SLOT(scrollUp()));
connect(&down,SIGNAL(clicked()),&down,SLOT(scrollDown()));
connect(&down2,SIGNAL(clicked()),&down,SLOT(scrollDown()));
void MainWindow::scrollDown()
{
QScrollArea area;
QWidget view;
if((QPushButton) &sender = down)
{
area=scrollArea;
view=viewport;
}
if((QPushButton) &sender = down2)
{
area=scrollArea;
view=viewport;
}
int curpos = area.verticalScrollBar()->value();
area.verticalScrollBar()->setValue(curpos+15);
int newpos = area.verticalScrollBar()->value();
QPoint topLeft = area.viewport()->rect().topLeft();
view.move(topLeft.x(),topLeft.y()-(newpos));
}
void MainWindow::scrollUp()
{
QScrollArea area;
QWidget view;
if((QPushButton) &sender = up)
{
area=scrollArea;
view=viewport;
}
if((QPushButton) &sender = up2)
{
area=scrollArea2;
view=viewport2;
}
int curpos = area.verticalScrollBar()->value();
area.verticalScrollBar()->setValue(curpos-15);
int newpos = area.verticalScrollBar()->value();
QPoint topLeft = area.viewport()->rect().topLeft();
view.move(topLeft.x(),topLeft.y()-(newpos));
}
Но это не работает по нескольким причинам. Я также попытался дать слот некоторые аргументы, например:
connect(&up,SIGNAL(clicked()),&up,SLOT(scrollUp(scrollarea1,viewport1)));
connect(&up2,SIGNAL(clicked()),&up,SLOT(scrollUp(scrollarea2,viewport2)));
Но опять же, нет успехов. Кто-нибудь может мне помочь?
Возможный дубликат [Могу ли я иметь один слот для нескольких сигналов?] (https://stackoverflow.com/questions/24313530/can-i-have-one-slot-for-several-signals) – ymoreau