LINUX.ORG.RU

Qt, Добавить слайдер в QGraphicsItem, C++

 ,


0

4

Привет,

Есть сцена, на ней graphicsItem-ы(представляет из себя прямоугольник на котором написан какой нибудь текст)

Требуется добавить слайдер(или его подобие) То есть если текст выходит за прямоугольник то слайдером можно было бы посмотреть весь текст.

Подскажите есть ли какие нибудь примеры? Или что то подобное?

Выводи не graphicsItem-ы, а QScrollArea через QGraphicsProxyWidget

AF ★★★
()

QScrollableLabel.h

#ifndef QSCROLLABLELABEL_H
#define QSCROLLABLELABEL_H

#include <QtWidgets/QtWidgets>

class QScrollableLabel : public QWidget {
    Q_OBJECT

public:
    explicit QScrollableLabel(QString text, QWidget *parent = 0);

protected:
    QVBoxLayout *layout;
    QScrollArea *scrollArea;
    QLabel *label;

public slots:
    void setText(QString text);

signals:
    void textChanged(QString);
};

#endif // QSCROLLABLELABEL_H
QScrollableLabel.cpp
#include "QScrollableLabel.h"

QScrollableLabel::QScrollableLabel(QString text, QWidget *parent) : QWidget(parent) {
    layout = new QVBoxLayout(this);
    layout->setSpacing(0);
    layout->setMargin(0);
    scrollArea = new QScrollArea(this);
    scrollArea->setFrameStyle(0);
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    layout->addWidget(scrollArea);
    label = new QLabel(this);
    label->setText(text);
    scrollArea->setWidget(label);
}

void QScrollableLabel::setText(QString text) {
    label->setText(text);
    emit textChanged(text);
}
main.cpp
#include <QApplication>
#include <QtWidgets/QGraphicsScene>
#include <QtWidgets/QGraphicsView>
#include <QtWidgets/QSlider>
#include "QScrollableLabel.h"

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QGraphicsScene scene(0, 0, 640, 480);
    QScrollableLabel *scrollableLabel = new QScrollableLabel("I love Qt. I love Qt. I love Qt. I love Qt. I love Qt. I love Qt.");
    scrollableLabel->resize(100, 40);
    QGraphicsProxyWidget *proxyWidget = scene.addWidget(scrollableLabel);
    proxyWidget->setRotation(45);
    proxyWidget->setPos(320, 240);
    QGraphicsView view(&scene);
    view.show();

    return app.exec();
}
не стоит благодарности.

vladimirsmirnov9
()
Ответ на: комментарий от vladimirsmirnov9

Благодарю, а как перемещение по сцене сделать? Через переопределение событий нажатия мыши?

Antonavt
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.