Я работаю в c ++ на qt 5.10.1, и у меня есть виджет, в который я динамически создаю дополнительные виджеты.
for(QString pics : nameVector)
{
QIcon* buttonIcon = new QIcon;
QImage image(QString("%1").arg(pics)); //QImage's Constructor takes a file path
image.scaled(9000, scrollerHeight*7 , Qt::KeepAspectRatio, Qt::SmoothTransformation);
QPixmap pixMap(QPixmap::fromImage(image).scaled(5000, scrollerHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation)); //8 will do it once scrollbar is removed.;
buttonIcon->addPixmap(QPixmap::fromImage(image).scaled(5000, scrollerHeight * m_scaleFactor, Qt::KeepAspectRatio, Qt::SmoothTransformation));
QPushButton *pixButton = new QPushButton;
pixButton->setIconSize(imageSize);
pixButton->setIcon(*buttonIcon);
pixButton->setObjectName(pics + "button");
ui.horizontalLayout_2->addWidget(pixButton); //addButton
QObject::connect(&pixButton, &pixButton->clicked(true),
&ui.tempOutputLabel, &fileFinder(pics);
}
область прокрутки в виджете увеличивается по горизонтали с каждым новым добавлением -это делается с помощью qts «горизонтальная политика: расширение» в конструкторе qt.
Теперь у меня есть полоса прокрутки, но я хочу переместить мышь (желательно, удерживая правую кнопку мыши)) и перетаскивание изображений - как прокрутка на телефоне.
Я начал с добавления событий перемещения мыши и кнопок мыши
void JobPreviewWidget::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) //najdeme najblizsi obrazok
;
if (event->button() == Qt::RightButton)
{
QPointF m_rightEnd = event->pos();
m_offset += m_rightEnd - m_rightStart;
}
}
void JobPreviewWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::RightButton)
{
m_rightStart = event->pos();
}
}
void JobPreviewWidget::mouseMoveEvent(QMouseEvent *event)
{
m_mousePoint = event->pos();
repaint(); //this is the problem for me
}
Я не знаю, как сделать перекрашиваемый горизонтальный макетсо смещением m_offset.Любые указатели приветствуются.