これはQt QGraphicsScene add and delete linesの続きです。私はそれをすることができると思ったが、私はできない。ウィンドウが表示されますが、何度チェック/チェックを外しても、軸は一度しか表示されず、隠れたりトグルしたりすることはありません。彼らは最初の "オン"チェックの後に滞在します。Qt QGraphicsScene軸の表示/非表示
私はqDebug(toggled ? "1" : "0")
を追加し、それが正しくtoggled
の値は、チェックボックスをすべてのクリックのために1
に0
から変更し、その逆を示し、彼らがオンになっている後軸だけにとどまります。私は約1週間前にQtを始めました(そしてC++については約1ヶ月前)、私は何を信じるべきか分かりません。
リンクされた質問では、thugaはループ内でconnect()
を使用し、1行だけを処理しますが、1行はトグルされます。私もbool
を返して、toggled
を返してみましたが、それは同じことです。あたかもsetVisible(false)
のように機能しません。ここで
は、私は(あなたが好きで、XY変数を置き換える)持っているものです。
[パブリックスロット]
void plotAxes()
{
QPen *dashedLine {new QPen(QBrush(Qt::blue), 1, Qt::DashLine)};
QGraphicsLineItem *xAxis {scene->addLine(xMin, 0, xMax, 0, *dashedLine)};
QGraphicsLineItem *yAxis {scene->addLine(yCenter, yMin, yCenter, yMax, *dashedLine)};
bool toggled {axesToggle->isChecked()};
if (!toggled)
{
xAxis->setVisible(false);
yAxis->setVisible(false);
}
else
{
xAxis->setVisible(true);
yAxis->setVisible(true);
}
scene->update();
}
axesToggle
はQCheckBox
であり、そのconnect()
機能は次のとおりです。
connect(axesToggle, &QCheckBox::toggled, this, &PlotBox::plotAxes);
ここで、PlotBox
がクラスです。さらに、boxToggle
とgridToggle
もありますが、これがうまくいかない場合は、先に進むことはできません。
[編集]
より良い私が持っているかを示すためには、ここでアプリのスクリーンショットです:
それはOctaveのに移った後、簡単なsinc()
でQGraphicsView
を試みることによって開始しましたstem
-プロットの場合、私はQtを練習するために追加し続けました(私はちょうどそれを学んでいます) - 今は奇妙な破線のグリッドラインを無視してください。現在のところ、sinc() settings
スピンボックスの+/-クリック後にプロットを自動的に更新するか、またはPlot style
を選択すると、アンチエイリアスを切り替えるためのキーショートカットが表示され、Ctrl+MouseWheel
でズームして正しく表示をリセットできます。だから私はグリッド線の設定を可能にしながら、&グリッドをトグルする可能性を追加すると思った。
私は公的なスロット機能をあきらめて、結果を得ることができました。そして、前の答えでthugaとしてconnect()
をしました。これはPlotBox()
コンストラクタ内にあります(PlotBox
がクラスです)。
QPen *dashedLine {new QPen(QBrush(Qt::blue), 1, Qt::DashLine)};
QGraphicsLineItem *xAxis {scene->addLine(xMin, 0, xMax, 0, *dashedLine)};
QGraphicsLineItem *yAxis {scene->addLine(yCenter, yMin, yCenter, yMax, *dashedLine)};
connect(axesToggle, &QCheckBox::toggled, [=](bool toggled){xAxis->setVisible(toggled); yAxis->setVisible(toggled)});
、それは XY変数は(int a {value}
のように)単純な値ですが、彼らはsinc() settings
spinboxesに依存している場合にのみ機能します。私はN
を設定するのにorderN = orderSet->value()
を使用します。これは、例えばxy変数の計算に使用されます。したがって、私はプロットに変更を加えなければ、上記はうまくいくでしょう。
私は彼らがsinc() settings
と同期してなりたい場合は、私はこのようにそれを行う必要があります。
orderN = static_cast<short>(orderSet->value());
spacingS = static_cast<short>(spacingSet->value());
plotHeight = static_cast<short>(heightSet->value());
int xMin {-spacingS};
int xMax {orderN*spacingS};
int yMin {plotHeight>>2};
int yMax {-plotHeight};
double yCenter {(orderN-1)*spacingS*0.5};
QPen *dashedLine {new QPen(QBrush(Qt::blue), 1, Qt::DashLine)};
QGraphicsLineItem *xAxis {scene->addLine(xMin, 0, xMax, 0, *dashedLine)};
QGraphicsLineItem *yAxis {scene->addLine(yCenter, yMin, yCenter, yMax, *dashedLine)};
connect(axesToggle, &QCheckBox::toggled, [=](bool toggled){xAxis->setVisible(toggled); yAxis->setVisible(toggled)});
これも動作しますが、私はいずれかへの任意の変更を行わない場合にのみ、 sinc() settings
スピンボックスの私がして軸をトグルしようとすると、xMin
&が呼び出されたときに、Plot style
関数が動的に使用するため、クラッシュします。この結果、値の不一致が発生します。それが唯一のspinboxes値を適応させる必要がある場合
ので、その後、私はこのように、一人で、そのための関数にそれを変換:
connect(axesToggle, &QCheckBox::toggled, [=](bool toggled){plotAxes(toggled);});
:私はこのようなconnect()
と呼ば void plotAxes(const bool &toggled)
{
orderN = static_cast<short>(orderSet->value());
spacingS = static_cast<short>(spacingSet->value());
plotHeight = static_cast<short>(heightSet->value());
int xMin {-spacingS};
int xMax {orderN*spacingS};
int yMin {plotHeight>>2};
int yMax {-plotHeight};
double yCenter {(orderN-1)*spacingS*0.5};
QPen *dashedLine {new QPen(QBrush(Qt::blue), 1, Qt::DashLine)};
QGraphicsLineItem *xAxis {scene->addLine(xMin, 0, xMax, 0, *dashedLine)};
QGraphicsLineItem *yAxis {scene->addLine(yCenter, yMin, yCenter, yMax, *dashedLine)};
xAxis->setVisible(toggled);
yAxis->setVisible(toggled);
//qDebug(toggled ? "1" : "0"); // this correctly shows "toggled" changing values
scene->update();
}
これは上記と同じxAxis->setVisible(toggle)
を使用しますが、動作しません。 Axes
チェックボックスがチェックされている場合にのみ軸が表示され、次にプロットを変更するまでオンのままになります。その後、再びオンに切り替えることができますが、それだけです。
main.cpp
は、約370行です。必要な場合は、pastebinに投稿することができます。おそらく最も幼稚なコードですが、私は学んでいます。