Рисование виджетов (таких как кнопки) над QGraphicsView - PullRequest
1 голос
/ 06 июня 2010

Как рисовать интерактивные виджеты, такие как QButtons и Line Edits, через QGraphicsView? Например, я выбрал область поверх изображения в приложении для редактирования изображений, которое отображает изображение с помощью QGraphicsView, и я хочу аннотировать эту область именем.

Итак, я хочу, чтобы редактирование линии и две кнопки (крестик и отметка) находились под этим прямоугольным выделением. Как мне нарисовать это?

Пример кода будет круто!

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

QGraphicsScene имеет функцию addWidget(), где вы можете добавить виджет к сцене. Если вы не хотите проходить через функцию addWidget сцены, вы можете создать QGraphicsProxyWidget, использовать setWidget() и добавить прокси-виджет в вашу сцену.

2 голосов
/ 07 июня 2010

Вы можете просто добавить их, как если бы вы использовали любой другой элемент управления. Я использовал Qt's Designer для генерации следующего:

class MyForm: public QMainWindow
{
    private:
        QGraphicsView *graphicsView;
        QLineEdit *lineEdit;
        QPushButton *pushButton;
        QPushButton *pushButton_2;
    public:
        MyForm() 
        {
            graphicsView = new QGraphicsView(this);
            graphicsView->setObjectName(QString::fromUtf8("graphicsView"));
            graphicsView->setGeometry(QRect(130, 90, 441, 191));
            lineEdit = new QLineEdit(graphicsView);
            lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
            lineEdit->setGeometry(QRect(160, 150, 113, 22));
            pushButton = new QPushButton(graphicsView);
            pushButton->setObjectName(QString::fromUtf8("pushButton"));
            pushButton->setGeometry(QRect(280, 140, 115, 32));
            pushButton_2 = new QPushButton(graphicsView);
            pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
            pushButton_2->setGeometry(QRect(400, 140, 115, 32));
        }
};
...