我有一个标头文件,如下所:
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
设置为单个初始化时。