问题
How do I draw interactive widgets such as QButtons and Line Edits over a QGraphicsView? For ex, I have selected a region over an image in an image editing app which displays an image with QGraphicsView, and I want to annotate this region with a name.
So I want to have a Line edit and two buttons (Cross and Tick) below this rectangular selection. How do I draw these?
Sample code would be cool!
回答1:
QGraphicsScene
has a function addWidget()
where you can add a widget to a scene. If you don't want to go through the scene addWidget function you can create a QGraphicsProxyWidget
use setWidget()
and add the proxy widget to your scene.
回答2:
You can just add these as you would do with any other control. I used Qt's Designer to generate the following:
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));
}
};
来源:https://stackoverflow.com/questions/2985374/drawing-widgets-such-as-buttons-over-qgraphicsview