明らかな何かが欠けている場合は申し訳ありませんが、私の質問に対する答えが見つからないようです。どんな助けでも大歓迎です。
QSlider を使用して、作成したクラスのデータを操作しようとしています。
メインウィンドウコンストラクターには、次のものがあります。
connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
同じクラスでスロットが定義されている場合:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
AFrame *frame;
Ui::MainWindow *ui;
public slots:
void setValue(int val)
{
frame->setMphValue(val);
}
};
私のフレームクラスは、設定した画像の上に描画できるようにするための昇格されたウィジェットであり、次のように定義されています。
class AFrame : public QLabel
{
Q_OBJECT
public:
AFrame( QWidget *parent );
void setMphValue(int val) { m_mph = val; }
protected:
void paintEvent( QPaintEvent *event );
private:
int m_mph;
};
問題は、AFrame クラスの paintEvent 関数で m_mph 値を割り当てようとすると、整数値が失われることです。
私が行方不明であることは明らかですか?この問題にアプローチするより良い方法はありますか?
そして私のpaintEventコード:
void AFrame::paintEvent(QPaintEvent *event)
{
QLabel::paintEvent(event);
QPainter painter(this);
QPen pen("#FF0099");
pen.setWidth(8);
painter.setPen(pen);
//rpm
painter.drawLine(250,275,165,165);
//oil
painter.drawLine(450,100,400,75);
//fuel
painter.drawLine(650,95,600,65);
//mph
QRect rec(0,0,125,3);
int velocity = m_mph;
int rpmStartVal = -225;
float mph = velocity * 1.68;
painter.translate(870,275);
painter.rotate(rpmStartVal + mph);
painter.drawRect(rec);
}