我有一个按钮,点击后会运行10秒的后端处理。 我想让按钮处于按下状态,直到过程完成,然后释放按钮。这是,以便用户知道该过程何时完成。举个例子:
QString ExButtonStyleSheet = "QPushButton{background-color:lightgreen;}\
QPushButton:hover{background-color:yellow;}\
QPushButton:pressed{background-color:green;}\
QPushButton:disabled{background-color:grey;}";
在上述情况下,一旦点击该按钮,即使进程正在运行(GUI也很忙),该按钮也会进入悬停状态(黄色),并且一旦空闲就变为lightgreen。 但是对于用户来说这不是非常明确的,不像压缩状态。(注意上面的样式表只是一个例子,在我的实际styesheet中,悬停状态颜色与正常情况略有不同。) 我正在寻找一个解决方案,其中按钮保持按下状态,并且仅在过程完成时释放。
答案 0 :(得分:2)
理论上你可以使用
QPushButton::setCheckable(true)
QPushButton::setDown(true) // Button is down
// Expensive task
QPushButton::setDown(false) // Button is released
将GUI冻结10秒是一个非常糟糕的主意。
您应该使用线程来执行昂贵的任务,而不是阻止GUI。调用QPushButton::setDown(true)
并向线程发出一个信号,其中包含昂贵任务的代码。
线程完成后,线程应调用MainWindow中包含QPushButton::setDown(false)
的插槽。这样,您的GUI将在此期间完全响应,并遵循良好的编码行为。