Qt 如何使QPushButton保持按下状态,直到过程完成?

Qt 如何使QPushButton保持按下状态,直到过程完成?,qt,Qt,我有一个按钮,点击后将运行后端进程,比如说,10秒。 我想使按钮处于按下状态,直到过程完成,然后释放按钮。这样,用户就可以知道过程何时完成。例如: QString ExButtonStyleSheet = "QPushButton{background-color:lightgreen;}\ QPushButton:hover{background-color:yellow;}\ QP

我有一个按钮,点击后将运行后端进程,比如说,10秒。 我想使按钮处于按下状态,直到过程完成,然后释放按钮。这样,用户就可以知道过程何时完成。例如:

QString ExButtonStyleSheet = "QPushButton{background-color:lightgreen;}\
                            QPushButton:hover{background-color:yellow;}\
                            QPushButton:pressed{background-color:green;}\
                            QPushButton:disabled{background-color:grey;}";
在上述情况下,单击按钮后,即使进程正在运行,按钮也会变为黄色悬停状态。GUI也很忙,空闲时会变为浅绿色。 但与按下状态不同,这对用户来说不是很明确。请注意,上面的样式表只是一个示例,在我的实际stylesheet中,悬停状态的颜色与正常颜色仅略有不同。
我正在寻找一种解决方案,在这个方案中,按钮保持按下状态,直到过程完成后才释放。

理论上,您可以使用

QPushButton::setCheckable(true)
QPushButton::setDown(true) // Button is down
// Expensive task
QPushButton::setDown(false) // Button is released
将GUI冻结10秒钟是一个非常糟糕的主意

您应该为昂贵的任务使用线程,而不是阻塞GUI。调用QPushButton::setDowntrue并向包含昂贵任务代码的线程发出信号


当线程完成时,线程应该调用主窗口中包含QPushButton::setDownfalse的插槽。这样,您的GUI将在这段时间内完全响应,并遵循良好的编码行为。

理论上您可以使用

QPushButton::setCheckable(true)
QPushButton::setDown(true) // Button is down
// Expensive task
QPushButton::setDown(false) // Button is released
将GUI冻结10秒钟是一个非常糟糕的主意

您应该为昂贵的任务使用线程,而不是阻塞GUI。调用QPushButton::setDowntrue并向包含昂贵任务代码的线程发出信号


当线程完成时,线程应该调用主窗口中包含QPushButton::setDownfalse的插槽。这样,您的GUI将在这段时间内完全响应,并遵循良好的编码行为。

谢谢。注:在设置完成后,需要重新喷漆,以使其始终工作。关于使用线程,在我的特殊情况下,最好是GUI冻结,而不是在过渡期间给用户GUI控件,并使代码复杂化。然后,您可以在操作期间锁定控件。冻结的问题是,操作系统可能会警告您程序发生了错误,并要求您关闭程序。对于用户来说,它好像崩溃了。谢谢。注:在设置完成后,需要重新喷漆,以使其始终工作。关于使用线程,在我的特殊情况下,最好是GUI冻结,而不是在过渡期间给用户GUI控件,并使代码复杂化。然后,您可以在操作期间锁定控件。冻结的问题是,操作系统可能会警告您程序发生了错误,并要求您关闭程序。对于用户来说,它就像崩溃了一样。