【问题标题】:Use UI elements from static function使用静态函数中的 UI 元素
【发布时间】:2017-09-03 14:00:48
【问题描述】:

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

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

我在互联网上查看过,但没有得到解决方案。请让我知道是否有解决方法。如果您需要更多信息,请告诉我提前谢谢

【问题讨论】:

  • 好吧,错误确实说明了这一点。 ui 不是静态的,因此如果没有静态方法中的对象,您将无法使用它。为什么你需要那个方法是静态的,你可以把ui 也设为静态吗?
  • 您的错误代码很简单。每个非静态成员函数都必须通过对象调用。
  • @SamiKuhmonen 它是第三方功能,所以它必须是静态的。
  • 这就是静态函数的处理方式:它们不能访问非静态成员。该功能是否需要是静态的?如果是这样,请考虑将ui 传递给它。
  • @WhiZTiM 我会添加问题

标签: c++ qt static static-functions


【解决方案1】:

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

  1. foo 使用singleton class。此方法仅在您只需要foo 的一个实例时才有效,这可能是因为它是QMainWindow。现在,您可以按如下方式设置文本:getInstance()->ui->fp->setText("Some Text");
  2. 通常回调函数能够将指针传递给用户提供的数据,但这取决于您使用的库。

【讨论】:

  • 感谢您的回答,我也得出了相同的结论(使用单例)。但我的对象在 main 中创建为 int main(int argc, char *argv[]) { QApplication a(argc, argv); BarrierInterfaceModule w; w.show(); return a.exec(); }
  • 抱歉上述评论格式错误。我不知道在那种情况下如何使用单例。
  • 为什么不改写成:BarrierInterfaceModule::getInstance()->show ();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
相关资源
最近更新 更多