2017-04-08 71 views
0

我正在構建一個qt應用程序,我必須訪問ui元素。但我得到的錯誤在靜態成員函數使用來自靜態函數的UI元素

無效使用成員「富:: UI」的代碼是如此大斜面加在這裏。

UI

private: 
Ui::foo *ui; 

初始化的宣言構造

foo::foo(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::foo) 
{ 
    ui->setupUi(this); 
} 

在它給錯誤的靜態函數訪問。

ui->fp->setText("Some Text"); 

靜態函數聲明。

static I eventCallback(PVOID i_pv_context, 
     T_xyz i_i_command, 
     PVOID i_pv_param); 

主代碼

int main(int argc, char *argv[]) 
    { 
    QApplication a(argc, argv); 
    BarrierInterfaceModule w; 
    w.show(); 
    return a.exec(); 
    } 

我期待在互聯網上,但沒有得到解決。請讓我知道如果有一種方法around.let我知道如果你需要任何更多的信息提前感謝

+0

嗯,錯誤確實是這樣說的。 'ui'不是靜態的,因此如果沒有靜態方法中的對象,就不能使用它。爲什麼你需要這種方法是靜態的,並且你可以使'ui'靜態? –

+0

您的錯誤代碼很簡單。每個*非靜態成員函數*必須通過一個對象調用。 – WhiZTiM

+0

@SamiKuhmonen它的第三方功能,所以它必須是靜態的。 – RPK

回答

0

我所知道的兩個可能的解決方案:

  1. 使用foo一個singleton class。如果只需要foo的一個實例,則此方法僅適用於此情況,因爲它是QMainWindow。現在,您可以將文本設置如下:getInstance()->ui->fp->setText("Some Text");
  2. 通常,回調函數能夠將指針傳遞給用戶提供的數據,但這取決於您正在使用的庫。
+0

謝謝你的回答,我也得出了同樣的結論(使用單身人士)。但是我的對象在main中被創建爲'int main(int argc,char * argv []) { QApplication a(argc,argv); BarrierInterfaceModule w; w.show(); return a.exec(); }' – RPK

+0

對於以上評論的錯誤格式感到抱歉。在這種情況下,我不知道如何使用單身人士。 – RPK

+0

爲什麼不重寫它爲:'BarrierInterfaceModule :: getInstance() - > show();' – m7913d