Для моего графического интерфейса я хотел бы иметь две пары кнопок, которые прокручивают вверх и вниз область прокрутки. Первый набор кнопок должен работать, скажем, в области прокрутки1, а второй набор кнопок должен работать в области прокрутки2. Виджеты, которые я поместил в область прокрутки, называются 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)));
Но опять безуспешно. Кто-нибудь может мне помочь?