C++ 使用Qt、MFC和CMake进行尝试/捕捉

C++ 使用Qt、MFC和CMake进行尝试/捕捉,c++,qt,mfc,cmake,C++,Qt,Mfc,Cmake,我使用CMake创建我的项目。在项目中,我主要使用QT C++和一些MFC功能的硬件接口。在代码中使用try/catch e->ReportError()或其他一些异常语句有意义吗?如果使用MFC创建对话框,如果抛出任何东西,您只想抛出指向CException派生对象的指针。这是因为DoModal函数包含一个catch来恢复关键应用程序状态,然后是一个重新抛出;如果您抛出任何其他类型的异常,它将被忽略,并且您的应用程序将被挂起 我不知道Qt是否有类似的问题。当然可以将异常与Qt一起使用。问题是,

我使用CMake创建我的项目。在项目中,我主要使用QT C++和一些MFC功能的硬件接口。在代码中使用try/catch e->ReportError()或其他一些异常语句有意义吗?

如果使用MFC创建对话框,如果抛出任何东西,您只想抛出指向CException派生对象的指针。这是因为
DoModal
函数包含一个catch来恢复关键应用程序状态,然后是一个重新抛出;如果您抛出任何其他类型的异常,它将被忽略,并且您的应用程序将被挂起


我不知道Qt是否有类似的问题。

当然可以将异常与Qt一起使用。问题是,它们有多有用。作为一个例子,考虑下面的类

class Thrower : public QObject
{
    Q_OBJECT
public slots:
    void throwException()
    {
        throw 42;
    }
};
异常在插槽中抛出。要捕获此异常,必须将 触发插槽的信号,在
try
块中,例如

class Catcher : public QObject
{
    Q_OBJECT
public:
    Catcher(Thrower* t)
    {
        connect(this, SIGNAL(test()), t, SLOT(throwException()));
    }

    void catchTest()
    {
        try
        {
            emit test(); // Will trigger Thrower::throwException().
        }
        catch (int number)
        {
            qDebug() << "Caught" << number;
        }
    }

signals:
    void test();
};
类捕获器:公共QObject
{
Q_对象
公众:
捕手(投掷者*t)
{
连接(此,信号(测试()),t,插槽(ThroweException());
}
无效测试()
{
尝试
{
emit test();//将触发Thrower::ThroweException()。
}
捕获(整数)
{

qDebug()你能澄清一下cmake与异常处理有什么关系吗?我只是详细解释了我如何创建和编译我的项目。是否使用异常与Qt、MFC甚至cmake无关。混合使用Qt和MFC?这很不寻常。@你还有其他想法吗?我仍在寻找答案。提前谢谢你我没有使用MFC创建任何对话框。我使用MFC进行硬件通信,而Qt用于GUI和对话框。这是因为DoModal函数包含一个用于恢复关键应用程序状态的捕获,然后是一个重新抛出;@Mark Ransom CWnd::InvokeHelper函数呢?函数是否包含用于恢复关键应用程序状态的捕获?@ViktorTarasov,我通过查看CDialog::DoModal的源代码发现了这一点。您也可以这样做。@Mark Ransom非常感谢。@Mehrwolf非常感谢您。