如何为QWidget继承的类创建线程?

发布于 2024-12-28 04:23:02 字数 95 浏览 0 评论 0原文

我想为 QWidget 继承的类创建一个线程。实际上,我尝试使用 QThread 进行多重继承,但它失败了,我想使用线程运行特定的成员函数。我怎样才能实现这个目标?有人知道吗?

I want to create a thread for a class which is Inherited by QWidget. Actually, I tried with multiple inheritance with QThread and it fails and I want to run particular member function using thread. How can I achieve this? Does anyone have any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

耶耶耶 2025-01-04 04:23:02

您可以使用实现线程并调用小部件方法的包装类:

class MyWidget : public QWidget
{ 
    [...]

    void threadMethod();
};

class MyThread : public QThread
{
    [...]

    MyThread( MyWidget* widget )
      : mWidget(widget)
    {
    }

    void run()
    {
       mWidget->threadMethod();
    }

    MyWidget* mWidget;
};

但是,您不应该在“threadMethod”中调用任何 QWidget 方法,因为 GUI 以及小部件属于“主”线程,并且 QWidget 方法不是线程安全的!

最好将您的小部件和线程代码完全分开。

You could use a wrapper class that implements the thread and calls your widget's method:

class MyWidget : public QWidget
{ 
    [...]

    void threadMethod();
};

class MyThread : public QThread
{
    [...]

    MyThread( MyWidget* widget )
      : mWidget(widget)
    {
    }

    void run()
    {
       mWidget->threadMethod();
    }

    MyWidget* mWidget;
};

However, you should not call any QWidget methods in "threadMethod", since the GUI and and thus the widgets belong to the "main" thread, and the QWidget methods are not thread-safe!

It would probably better to keep your widget and thread code completely separate.

白馒头 2025-01-04 04:23:02

一种解决方案可能是使用嵌套类,在其中您将传递一个指向普通小部件类的指针以及嵌套运行方法中您需要的所有方法。

One solution could be to use nested class in which you will pass a pointer to your normal widget class and all all methods you need from nested run method.

浅浅淡淡 2025-01-04 04:23:02

属于 GUI 模块的 Qt 类是不可重入的。它们必须从主线程运行。

Qt classes which belong to the GUI module are not reentrant. They MUST be run from the main thread.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文