1

抱歉,如果我遗漏了一些明显的东西,但我似乎无法找到我的问题的答案。任何帮助,将不胜感激。

我正在尝试使用 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);


 }
4

2 回答 2

2

整数值不会丢失。mph小部件对值更新时应该重新绘制这一事实没有神奇的洞察力。您setMphValue应该如下所示。这就是它的全部。

void setMphValue(int val) {
   m_mph = val;
   update();
}
于 2012-06-04T14:27:53.610 回答
0

添加到 Kuba 的回复中:

您还应该检查是否val与以前的值相同,以避免在实际上没有必要时避免重新绘制 - 以及稍后调用的任何东西都会产生副作用无限循环update()touch setMphValue()

在全:

void setMphValue(int val) {
   if (val == m_mph) return;
   m_mph = val;
   update();
}
于 2014-05-08T09:58:24.423 回答