我有一个超类BackgroundWorkerWithWaitDialog
来管理一个WaitDialog
,它实现了一个进度条框,其中包含" abort"按钮。它在QThread中用作QObject。
我的目的是从BackgroundWorker派生任何后台任务,并仅实现execute()
命令,轮询aborted
标志以阻止它。
BackgroundWorkerWithWaitDialog派生自BackgroundWorker
,它是一个QObject,所有类都是Q_OBJECT,工人类能够使用信号和插槽更新gui。此通信(Worker to Gui Object)正常工作。
问题在于虽然WaitDialog响应按钮点击,但是{Wait}信号是从WaitDialog发出的,但是BackGroundWorker没有接收到。{1}}信号。 (Gui - >工人)
aborted()
...
class WaitDialog : public QDialog
{
Q_OBJECT
public:
explicit WaitDialog(QWidget *parent = 0);
~WaitDialog();
public slots:
void setText(QString text);
void setProgress(bool shown, int max);
void enableAbort(bool enable);
void setProgression (int level);
signals:
void aborted();
private slots:
void on_cmdAbort_clicked();
private:
Ui::WaitDialog *ui;
};
void WaitDialog::on_cmdAbort_clicked()
{
qDebug() << "ABORT";
emit aborted();
}
...
/// BackgroundWorker is QObject-derived.
class BackgroundWorkerWithWaitDialog : public BackgroundWorker
{
Q_OBJECT
public:
explicit BackgroundWorkerWithWaitDialog(MainWindow *main, WaitDialog *dialog);
...
public slots:
virtual void abortIssued();
我有什么遗失的吗?我暂时用听众模式解决了这个问题,但坦率地说,我不喜欢这种混合修复。
为什么没有调用abortIssued槽?
提前致谢。
总结一下:
值得一提的是BWWWD类是由其他SpecificWorker类派生的,这些类实现了使用aborted()函数来中断处理的特定函数。
答案 0 :(得分:0)
你的问题是:
我有一个超类BackgroundWorker,它管理一个WaitDialog,它实现了一个带有&#34; abort&#34;的进度条框。按钮。
在BackgroundWorkerWithWaitDialog
构造函数中,您没有将dialog
传递给BackgroundWorker
的构造函数,在设置时也不使用BackgroundWorker
成员变量你的联系。
您的问题open语句错误,或者您正在连接到从未使用过的对话框。