對不起,如果我失去了一些明顯的東西,但我似乎無法找到我的問題的答案。任何幫助,將不勝感激。如何將插槽連接到Qt中的用戶定義變量?
我想使用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);
}
你確定的setValue函數被調用?如果連接失敗,Qt通常會通過調試輸出進行投訴。 –
我沒有調試器工作通過它,但我沒有得到我以前見過的「沒有這樣的插槽」的錯誤,我沒有得到任何其他警告,所以我假設它被調用。 – user1430512
「當我嘗試在paintEvent函數中分配m_mph值時」你沒有這樣做,你正在將它分配給'setMphValue(int)'方法。如果在移動滑塊時'AFrame'沒有改變,則需要在'setMphValue(int)'中調用'update()'。 – cmannett85