4

私はQGraphicsItemそれにテキストがある を持っています。このテキストを編集可能にして、ユーザーがダブルクリックすると編集モードになるようにします。これを行う最も簡単な方法は、テキストを に変更しQLineEdit、ユーザーがフォーカスを離すか、完了したら Enter キーを押すようにすることです。

QLineEditを に追加するにはどうすればよいQGraphicsItemですか? をサブクラス化したQGraphicsItemので、その内部にアクセスできます。

4

3 に答える 3

10

QWidgetベース オブジェクトを に追加するにはQGraphicsScene、 aQGraphicsProxyWidgetが必要です。

で関数を呼び出すと、ウィジェットが に埋め込まれ、それaddWidgetが呼び出し元に返されます。QGraphicsSceneQGraphicsProxyWidgetQGraphicsProxyWidget

QGraphicsProxyWidgetイベントをウィジェットに転送し、異なる座標系間の変換を処理します。

QLineEditで aを使用することを検討しているQGraphicsSceneので、直接追加するかどうかを決定する必要があります。

QGraphicsScene* pScene = new QGraphicsScene;
QLineEdit* pLineEdit = new QLineEdit("Some Text");

// add the widget - internally, the QGraphicsProxyWidget is created and returned
QGraphicsProxyWidget* pProxyWidget = pScene->AddWidget(pLineEdit);

または、現在の に追加するだけQGraphicsItemです。ここでは、次の子として追加できますQGraphicsItem

MyQGraphicsItem* pMyItem = new MyQGraphicsItem;
QGraphicsProxyWidget* pMyProxy = new QGraphicsProxyWidget(pMyItem); // the proxy's parent is pMyItem
pMyProxy->setWidget(pLineEdit); // adding the QWidget based object to the proxy

またはQGraphicsProxyWidget、クラスのメンバーとして を追加して関連する関数を呼び出すこともできますが、子として追加する方がおそらくはるかに簡単です。

于 2013-08-15T07:53:52.883 に答える
5
QGraphicsTextItem::setTextInteractionFlags (Qt::TextInteractionFlags flags)

API を使用できます。ただし、その中に作成する必要がありますQGraphicsTextItem

詳細については、次のリンクを確認してください:実装の詳細

于 2013-08-15T03:16:57.257 に答える
2

特定の動作が必要なQGraphicsProxyWidget場合や単にQGraphicsProxyWidget. Qt SDK とドキュメントの「埋め込みダイアログ」の例を見てくださいQGraphicsProxyWidget。それは長い間そこにあったので、あなたのバージョンにあるはずです. これが役立つことを願っています。

于 2013-08-15T02:02:19.793 に答える