Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用静态函数中的UI元素_C++_Qt_Static_Static Functions - Fatal编程技术网

C++ 使用静态函数中的UI元素

C++ 使用静态函数中的UI元素,c++,qt,static,static-functions,C++,Qt,Static,Static Functions,我正在构建一个qt应用程序,我必须在其中访问ui元素。但我也有错误 在静态成员函数中使用成员“foo::ui”无效 代码太大,无法在此处添加 用户界面声明 private: Ui::foo *ui; 构造函数中的初始化 foo::foo(QWidget *parent) : QMainWindow(parent), ui(new Ui::foo) { ui->setupUi(this); } 在给定错误的静态函数中访问 ui->fp->setText("Some T

我正在构建一个qt应用程序,我必须在其中访问ui元素。但我也有错误

在静态成员函数中使用成员“foo::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();
  }

我在网上查过,但并没有得到答案。请告诉我是否有办法。如果您需要更多信息,请告诉我。提前谢谢

我知道两种可能的解决方案:

  • 使用for
    foo
    。仅当您只需要一个
    foo
    的实例化时,此方法才有效,这可能是因为它是
    QMainWindow
    。现在,您可以如下设置文本:
    getInstance()->ui->fp->setText(“一些文本”)
  • 回调函数通常能够传递指向用户提供的数据的指针,但这取决于您使用的库

  • 嗯,错误确实说明了这一点
    ui
    不是静态的,因此在静态方法中没有对象时无法使用它。为什么您需要该方法是静态的,并且可以使
    ui
    也是静态的?您的错误代码是直接的。每个非静态成员函数都必须通过对象调用。@SamiKuhmonen它是第三方函数,所以它必须是静态的。这就是静态函数的处理方法:它们不能访问非静态成员。这个函数需要是静态的吗?如果是这样的话,考虑把代码> UI>代码>给它。@惠茨姆,我会补充问题,谢谢你的回答,我也得出了同样的结论(使用SuntLon)。但是我的对象在main中创建为
    intmain(intargc,char*argv[]){QApplication a(argc,argv);BarrierInterfaceModule w;w.show();return a.exec();}
    很抱歉上面的注释格式不好。在这种情况下,我不知道如何使用singleton。为什么不将其重写为:
    BarrierInterfaceModule::getInstance()->show()