0

これを行う方法はありますか?QwtPlotMarker を使用して作成したマーカーに対応するラベルを作成しようとしています。私の目的は、これまでのコードを含む次の例で、クリックの座標、m_xPos および m_yPos を含むラベルを表示することです。

QwtPlotMarker *testMarker = new QwtPlotMarker();
testMarker->setLineStyle(QwtPlotMarker::HLine);
testMarker->setLabelAlignment(Qt::AlignRight | Qt::AlignBottom);
testMarker->setLinePen(QPen(QColor(200,150,0), 0, Qt::DashDotLine));
testMarker->setSymbol( QwtSymbol(QwtSymbol::Diamond, QColor(Qt::yellow), QColor(Qt::green), QSize(7,7)));
testMarker->setXValue(m_xPos);
testMarker->setYValue(m_yPos);
testMarker->show();
testMarker->attach(d_graph->plotWidget());
testMarker->setLabel(....)

m_xPos と m_yPos は std::string です

4

3 に答える 3

1
QwtPlotMarker *testMarker = new QwtPlotMarker();
testMarker->setLineStyle(QwtPlotMarker::HLine);
testMarker->setLabelAlignment(Qt::AlignRight | Qt::AlignBottom);
testMarker->setLinePen(QPen(QColor(200,150,0), 0, Qt::DashDotLine));
testMarker->setSymbol( QwtSymbol(QwtSymbol::Diamond, QColor(Qt::yellow), QColor(Qt::green), QSize(7,7)));
testMarker->setXValue(m_xPos);
testMarker->setYValue(m_yPos);
testMarker->show();
testMarker->attach(d_graph->plotWidget());

QwtText markerLabel = QString::fromStdString(+ m_xPos + ", " + m_yPos +);
testMarker->setLabel(markerLabel);

私がする必要があったことです。私はそれを理解しました、ありがとう。QStringをとるコンストラクターを見たことがありませんでした。これを使用して連結された文字列を取得し、QStringに変換すると、それをプロットに表示することができました。

于 2012-09-18T13:10:36.110 に答える
1

QwtTextのドキュメントを見ると、QStringを受け取るコンストラクターが1つあります。これはQtのQStringですか?もしそうなら、あなたはそれをこのように変換することができます:

wstring xPos2(m_xPos.begin(), m_xPos.end());
testMarker->setXValue(QString(xPos2.data(), xPos2.length()));

wstring yPos2(m_yPos.begin(), m_yPos.end());
testMarker->setYValue(QString(m_yPos.data(), m_yPos.length()));

これは、wstringコンストラクターに各charをwchar_tに割り当てるだけで、バイトをUnicode文字に変換するだけであることに注意してください。より堅牢な方法は、WindowsのMultiByteToWideStringのようなものを使用して、実際にエンコーディング変換を実行することです。

于 2012-09-18T11:51:21.170 に答える
0

QwtTextオブジェクトはQString、C 文字列から構築できるオブジェクトで構築できます。したがって、次のように動作するはずです。

std::string my_string("Hello, World!");
QwtText markerLabel(my_string.c_str());
于 2013-11-08T05:45:26.793 に答える