2015-09-09 98 views
0

calculator.h聯盟和QT-Formfileds

#ifndef CALCULATORFORM_H 
#define CALCULATORFORM_H 

#include "ui_calculatorform.h" 

class CalculatorForm : public QWidget, private Ui::CalculatorForm 
{ 
Q_OBJECT 

    public: 
    CalculatorForm(QWidget *parent = 0); 

private slots: 
    void on_inputSpinBox1_valueChanged(unsigned short value); 
    void on_inputSpinBox2_valueChanged(unsigned short value); 
}; 

#endif 

我的程序:

class my 
{ 
public: 
    union urgl 
    { 
    unsigned short a[2]; 
    float  f; 
    }; 
    urgl obj; 
}; 

void CalculatorForm::on_inputSpinBox1_valueChanged(unsigned short value) { 
    my v; 
    v.obj.a[0]=inputSpinBox1->value; 
    v.obj.a[1]=inputSpinBo2->value; 
    outputWidget->setText(QString::number(inputSpinBox2->v.obj.f())); 
} 

void CalculatorForm::on_inputSpinBox2_valueChanged(unsigned short value) 
{ 
    my v; 
    v.obj.a[0]=inputSpinBox1->value; 
    v.obj.a[1]=inputSpinBox2->value; 
    outputWidget->setText(QString::number(inputSpinBox1->v.obj.f())); 
} 

我得到一些錯誤:

'QSpinBox::value' from type 'int (QSpinBox::)() const' to type 'short     unsigned int' 
v.obj.a[0]=inputSpinBox1->value; 
     ^
..\multipleinheritance\calculatorform.cpp:74:16: error: 'inputSpinBo2' was not declared in this scope 
v.obj.a[1]=inputSpinBo2->value; 
      ^
**strong text**..\multipleinheritance\calculatorform.cpp:75:59: error: 'class QSpinBox' has no member named 'v' 
outputWidget->setText(QString::number(inputSpinBox2->v.obj.f())); 
                ^
..\multipleinheritance\calculatorform.cpp: At global scope: 
..\multipleinheritance\calculatorform.cpp:71:67: warning: unused parameter  'value' [-Wunused-parameter] 
    void CalculatorForm::on_inputSpinBox1_valueChanged(unsigned short value) 
                  ^
..\multipleinheritance\calculatorform.cpp: In member function 'void  CalculatorForm::on_inputSpinBox2_valueChanged(short unsigned int)': 
..\multipleinheritance\calculatorform.cpp:83:15: error: cannot convert 'QSpinBox::value' from type 'int (QSpinBox::)() const' to type 'short unsigned  int' 
v.obj.a[0]=inputSpinBox1->value; 
     ^
..\multipleinheritance\calculatorform.cpp:84:15: error: cannot convert 'QSpinBox::value' from type 'int (QSpinBox::)() const' to type 'short unsigned int' 
v.obj.a[1]=inputSpinBox2->value; 
     ^
..\multipleinheritance\calculatorform.cpp:86:59: error: 'class QSpinBox' has no member named 'v' 
outputWidget->setText(QString::number(inputSpinBox1->v.obj.f())); 
                ^
..\multipleinheritance\calculatorform.cpp: At global scope: 
..\multipleinheritance\calculatorform.cpp:80:67: warning: unused parameter 'value' [-Wunused-parametervoid 

CalculatorForm::on_inputSpinBox2_valueChanged(unsigned short value) 
                   ^
Makefile.Debug:592: recipe for target 'debug/calculatorform.o' failed 

我在哪裏可以稱之爲 「我的」 類所以它可以被其他類訪問? 如何顯示輸出文本字段中的浮點值? 我正在使用Qt Designer 5.5

+0

對不起,錯別字在這裏是題外話。仔細閱讀代碼,並確保沒有錯別字。到目前爲止,我看到的只是錯別字,錯別字,錯別字。瞭解代碼的含義。 –

回答

0

有多個問題可以捆綁爲「拼寫錯誤」。

QSpinBox::value是一個函數,所以你應該調用它:

v.obj.a[0]=inputSpinBox1->value(); // correct 
v.obj.a[0]=inputSpinBox1->value; // wrong 

my::urgl.f是不可調用的,所以你應該來調用它,並且spinboxes沒有v成員之一:

outputWidget->setText(QString::number(v.obj.f)); // correct 
outputWidget->setText(QString::number(inputSpinBox2->v.obj.f())); // wrong 

你的插槽類型是錯誤的:

void on_inputSpinBox1_valueChanged(int value); // correct 
void on_inputSpinBox1_valueChanged(unsigned short value); // wrong 

我在哪裏可以稱之爲 「我的」 類[...]

那類不是調用 - 它沒有實現operator()()。調用類實例並不是訪問它的同義詞。只有當你字面意思是調用一個可調用對象時才使用「call」這個詞。

[...]所以它可以被其他類訪問?

其他類想要訪問它嗎?顯示代碼。到目前爲止,在你的代碼中沒有任何地方存在「另一個類」,它將「訪問」my的一個實例。

如何顯示輸出文本字段中的浮點值?

像你這樣的,雖然我不知道你爲什麼要做兩個短整型手動合併成一個浮動......如果這是一個浮動的二元結構的一些演示,然後確定這個工程,但我懷疑這就是你的意思。至少,您希望整數類型具有確定的大小:uint16_tquint16,short int不保證是16位寬。

你知道你可以使用QDoubleSpinBox來直接獲得浮點值,對嗎?

+0

感謝您的回覆。我的案例: 我通過modbus-tcp從電錶獲得兩個16位整數值。 這兩個值我必須作爲32位浮點運算。 喜歡它: 1。16位值......... | 2。 16位值......... | 1010111101110101 | 1110000111101110 | + + + ------------------ 32 Bit Float --------------- + – knuppel

+0

不,我已經知道了像這樣: http://pastebin.com/dDYftr9s 問題是,似乎第二個輸入字段似乎被忽略。當我改變輸入框1時,輸出框只會改變數值。 – knuppel

+0

@knuppel如果你想添加細節,請編輯你的問題。不要使用pastebin代碼片段,直接將它們包含在問題的文本中。 –