芝麻糊糊999 2022-05-10 16:18 采纳率: 100%
浏览 115
已结题

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.我该如何修改使用模板?或者其他方法?
帮帮忙,非常感谢!

  • 写回答

2条回答 默认 最新

  • Cynhard85 2022-05-10 16:47
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月19日
  • 已采纳回答 5月11日
  • 创建了问题 5月10日