给出此代码:
void FooBar::ProcessExitHandler(QProcess* someProcess, QString logsPath)
{
if (clientProcess->exitCode() != 0)
{
QMessageBox* dialog = new QMessageBox();
dialog->setText("bye bye");
dialog->setStandardButtons(0);
QObject::connect(dialog, &QMessageBox::finished, [this](int) {
if (mMainWindow->AutoCloseCheckBoxChecked())
{
delete dialog; //TODO: need to confirm what is the correct way
this->quit();
}
});
dialog->show();
dialog->activateWindow();
}
else
{
if (mMainWindow->AutoCloseCheckBoxChecked())
{
delete dialog; //TODO: need to confirm what is the correct way
this->quit();
}
}
}
像这样正确地呼叫delete dialog
吗?有没有更多的QT惯用方式呢?
另外,令我感到困惑的是(来自文档)我应该将parent
传递给消息框的构造函数的想法。然后我将获得自动内存管理,对吗?那是我应该追求的QT风格吗?
我知道由于应用程序仍在退出,因此泄漏“无关紧要”,但是我想做正确的事。
答案 0 :(得分:0)
正确的方法是使用setAttribute
<div id="sidebar">
<ul class="nav-main-ul">
<li class="nav-item"><a href="#"><i class="fa fa-home" style="padding-right: 13px"></i>Home</a></li>
<li class="nav-title">Airports</li>
<li class="nav-item">
<a href="javascript:void(0)"><i class="far fa-paper-plane" style="padding-right: 13px"></i>North Airports</a>
<ul class="nav-dropdown">
<li><a href="">LLBG | Tel-Aviv</a></li>
<li><a href="">LLSD | Sde Dov</a></li>
<li><a href="">LLHZ | Herzliya</a></li>
<li><a href="">LLHA | Haifa</a></li>
<li><a href="">LLIB | Rosh Pina</a></li>
</ul>
</li>
<li class="nav-item">
<a href="#"><i class="far fa-paper-plane" style="padding-right: 13px"></i>South Airports</a>
<ul class="nav-dropdown">
<li><a href="">LLOV | Ovda</a></li>
<li><a href="">LLET | Eilat</a></li>
</ul>
</li>
<li class="nav-title">Airstrips</li>
<li class="nav-item">
<a href="#"><i class="far fa-paper-plane" style="padding-right: 13px"></i>North Airstrips</a>
<ul class="nav-dropdown">
<li><a href="">LLKS | Kiryat Shmona</a></li>
<li><a href="">LLBO | Habonim</a></li>
<li><a href="">LLMG | Megido</a></li>
</ul>
</li>
<li class="nav-item">
<a href="#"><i class="far fa-paper-plane" style="padding-right: 13px"></i>South Airstrips</a>
<ul class="nav-dropdown">
<li><a href="">LLBS | Beer Sheva</a></li>
<li><a href="">LLMZ | Masada</a></li>
<li><a href="">LLEY | Ein Yahav</a></li>
<li><a href="">LLYO | Yotvata</a></li>
</ul>
</li>
<li class="nav-title">Miscellaneous</li>
<li class="nav-item"><a href="#"><i class="fa fa-headphones-alt" style="padding-right: 13px"></i>ATC Tools</a></li>
</ul>
</div>
<button onclick="toggleSidebar()">Toggle Sidebar</button>
通过设置属性 QMessageBox* dialog = new QMessageBox();
dialog->setAttribute(Qt::WA_DeleteOnClose);
,将在适当的时候调用析构函数。
当您手动调用WA_DeleteOnClose
时,指针将保留其值(地址),尽管它不再有效。如果由于某种原因再次使用该指针,则该应用程序将崩溃。
\ warning在等待事件发生时删除QObject 交付可能导致崩溃。您不得直接删除QObject 如果它与当前正在执行的线程不在同一线程中。 使用deleteLater()代替,这将导致事件循环删除 在所有未决事件都已传递给该对象之后。 https://code.woboq.org/qt5/qtbase/src/corelib/kernel/qobject.cpp.html#881