QT类模板使用“QTRunWork”返回false,但未记录错误。

问题遇到的现象和发生背景

目的是用户选择一个选项之后弹出一个窗口用户输入内容后调用选择选项的相应类的函数进行操作。
现在想到的是使用模板,出现了问题。

问题相关代码,请勿粘贴截图
#pragma once

#include <QWidget>
#include "ui_DeleteInform.h"
template<typename T>
class DeleteInform : public QWidget
{
    Q_OBJECT

public:
    DeleteInform(QWidget* parent = Q_NULLPTR);
private slots:
    void deleteslot();

private:
    Ui::DeleteInform ui;
};

#include "DeleteInform.h"
#include"System.h"
#include <QtWidgets/qmessagebox.h>
template<typename T>
DeleteInform<T>::DeleteInform(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    QObject::connect(ui.OK, SIGNAL(clicked()), this, SLOT(deleteslot()));
}
template<typename T>
void DeleteInform<T>::deleteslot() {
    std::string temp = ui.NumEdit->text().toStdString();
    if (T::DeleteOne(temp)) {
        QMessageBox::information(this, _Q("提示框"), _Q("删除成功!"), QMessageBox::Ok);
    }
    else {
        QMessageBox* pmessage2 = new QMessageBox(QMessageBox::Warning, _Q("提示框"), _Q("编号不存在,删除失败!"), QMessageBox::Ok);
        pmessage2->exec();
    }
}
运行结果及报错内容

img

我的解答思路和尝试过的方法

已查看所有文件都存在项目文件夹下,不存在名称错误,与QT插件更新无关。
已单独编译每一个文件,发现只有使用了模板的这个出错。

我想要达到的结果

1.出现此问题的原因?
2.我该如何修改使用模板?或者其他方法?
帮帮忙,非常感谢!

先确认你的编译器是否支持模板类的声明和定义可以拆分到 .h 和 .cpp 中,据我所知支持这个特性的编译器非常少,一般的做法是将模板类的声明和定义都放在 .h 中

两个方面可以尝试下

方法一、

QT VS工具的版本问题
我从 Visual Studio 中卸载了 Qt VS 工具并安装了以前版本的 Qt VS 工具。

你可以在这里找到它:https ://download.qt.io/official_releases/vsaddin/2.5.2/

这对我行得通。可能是新版本的问题。

编辑:不要忘记禁用自动更新。

方法二、

我遇到过同样的问题。

意外地,我有个int在我的public slots:.将其恢复正常public:对我有用并解决了问题。

希望这也对你有用。

参考链接: