gpt4 book ai didi

c++ - 正确使用 QProgressDialog

转载 作者:行者123 更新时间:2023-11-28 02:17:28 41 4
gpt4 key购买 nike

我正在使用 QProgressDialog 来显示从 QTreeView 中的数据库加载数据的进度。我使用信号和槽来发送记录数和当前记录。这是插槽代码:

void MainWindow::loadDataUpdate(int value, int max)
{
if ((max > 0) && (value == 0))
{
m_progressDialog = new QProgressDialog("Warming up - please wait ... ", "Cancel", value, max , this);

m_progressDialog->setMinimumDuration(2);
m_progressDialog->setWindowModality(Qt::WindowModal);
m_progressDialog->setAttribute(Qt::WA_DeleteOnClose);
m_progressDialog->setCancelButton(0);
m_progressDialog->setWindowTitle( this->windowTitle() );
}
if ((value == max) && (max > 0) )
{
m_progressDialog->setValue(m_progressDialog->maximum());
return;
}
m_progressDialog->setValue(value);
}

m_progressDialog 在 .h 文件中声明为:

QProgressDialog* m_progressDialog;

因此,发送一个零值和一个最大值会创建对话框并进行设置。

我遇到的问题是,如果用户通过单击右上角的十字或使用 alt-F4 关闭 ProgressDialog 窗体,则会发生错误。这大概是因为我正在使用 Qt::WA_DeleteOnClose。

我想做的是检测到对话框已关闭并再次打开它,或者关闭整个应用程序或继续。

如何测试进度对话框是否已关闭?

或者阻止它被关闭?

最佳答案

QProgressDialog 为此提供了一个cancelled 信号。您可以连接到它,然后显示对话框,或者做任何您想做的事情。

所以您需要做的是创建一个合适的插槽,并将其连接到信号:

connect(m_progressDialog, &QProgressDialog::canceled, this, &MainWindow::onDialogCanceledSlot);

<..>
//add a slot to your window class:
class MainWindow
{
public slots:
void onDialogCanceledSlot()
{
m_progressDialog->show();//for example.
}
}

如果你只是想把它显示回来,你可以使用 lambda:

connect(m_progressDialog, &QProgressDialog::canceled, [&](){
m_progressDialog->show();
});

请注意,您在使用 WA_DeleteOnClose 时仍然无法执行此操作(因为对话框无论如何都会被删除),因此我建议您避免设置 WA_DeleteOnClose,而是将对话框存储在 QScopedPointer 中。这样您就可以重用它(无需重新创建),并且当您的 MainWindow 结束时它会被正确删除。

关于c++ - 正确使用 QProgressDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629805/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com