检查是否创建/分配了类型QDialog的变量



我有一个标头文件,如下所:

testDialog* test; //Here testDialog is a QDialog type

这是我的.cpp文件:

test = new testDialog(m_dialog);

我想在执行之前检查对话框是否已创建/分配给test

所以我在CPP文件中进行了以下操作:

void testApp::init() {
if (somethingelse) {
    test = new testDialog(m_dialog);
    mFlag = true;
}
}

在这里,我正在覆盖EXEC函数:

int testApp::exec()
{
    if (mFlag) {
        test->show();
        test->activateWindow();
        mFlag = false;
    }
    return testApp::exec();
}

这有效。但是我想知道是否可以不使用标志。诸如直接检查test中是否创建/分配的新对话框类型之类的东西。谁能提出任何建议?谢谢。

您可以检查:if(test == q_nullptr)

在您的.h文件中创建以下步骤:testDialog *test = q_nullptr;

void testApp::init() {
    if (test == Q_NULLPTR) {
        test = new testDialog(m_dialog);
        //mFlag = true;
    }
}
int testApp::exec()
{
    if (test) {
        test->show();
        test->activateWindow();
        //mFlag = false;
    } else { //if you want
        test = new testDialog(m_dialog);
        this->exec(); // or test->show(); test->activeWindow();
    }
    return testApp::exec();
}
void testApp::deleteTest() {
    delete this->test;
    this->test = Q_NULLPTR;
}

您可以简单地测试if ( test != NULL && test->isVisible() )

如果创建对话框并且现在可见,则将评估到true(请注意,如果您称为show(),则可能会返回false,但该应用程序尚未显示)。

如所注释的,请确保将test设置为单个初始化时。

最新更新