我是QT的新手.我有一个类从小部件扩展,如:
class myclass: public Qwidget
{
Q_OBJECT
public:
void myfunction(int);
slots:
void myslot(int)
{
//Here I want to put myfunction into a thread
}
...
}
Run Code Online (Sandbox Code Playgroud)
我不知道怎么做.请帮我.
Red*_*edX 15
添加一个QThread
成员然后myslot
将对象移动到该线程并运行该函数.
class myclass: public Qwidget
{
QThread thread;
public:
slots:
void myfunction(int); //changed to slot
void myslot(int)
{
//Here I want to put myfunction into a thread
moveToThread(&thread);
connect(&thread, SIGNAL(started()), this, SLOT(myfunction())); //cant have parameter sorry, when using connect
thread.start();
}
...
}
Run Code Online (Sandbox Code Playgroud)
我的答案基本上与本文相同:是否可以在不对其进行子类化的情况下使用QThread实现轮询?
你的问题很广泛。请找到一些可能对您有益的替代方案:
如果对象有父对象,则无法移动对象。
由于您的对象是一个小部件,我假设它会有一个父对象。
因此,这种方法不太可能对您有用。
另一种选择是使用QtConcurrent::run()这允许一个方法由另一个线程执行。但是这样你就不能使用信号/插槽机制。由于您将方法声明为插槽。我假设您想使用这种机制。如果你不在乎,那么这个方法对你很有用。
最后,您可以在您的插槽中创建一个QThread子类并在那里执行您喜欢的任何操作。
这就是我能想到的。
我希望这有帮助。