Qt。在执行重载功能之前更新元素的外观 void MyClass::onButtonClicked(){ QPushButton*button=static_cast(sender()); 按钮->设置禁用(真); 执行一些重量级功能5秒或10秒(); }

Qt。在执行重载功能之前更新元素的外观 void MyClass::onButtonClicked(){ QPushButton*button=static_cast(sender()); 按钮->设置禁用(真); 执行一些重量级功能5秒或10秒(); },qt,Qt,我希望我的按钮在该功能之前被可视化地更新(现在它在之后被更新)。我应该在这里使用单独的线程吗?第二个问题是,我的程序在执行函数时冻结。我在这里看到两种可能性: 在自己的线程中执行繁重的工作 在你执行繁重的工作之前打电话来处理重绘等。顺便说一句,你可以省略这个标志,但我会把它留在那里,这样两次快速点击后不会导致随机行为 我在这里看到两种可能性: 在自己的线程中执行繁重的工作 在你执行繁重的工作之前打电话来处理重绘等。顺便说一句,你可以省略这个标志,但我会把它留在那里,这样两次快速点击后不会导致随机

我希望我的按钮在该功能之前被可视化地更新(现在它在之后被更新)。我应该在这里使用单独的线程吗?第二个问题是,我的程序在执行函数时冻结。

我在这里看到两种可能性:

  • 在自己的线程中执行繁重的工作
  • 在你执行繁重的工作之前打电话来处理重绘等。顺便说一句,你可以省略这个标志,但我会把它留在那里,这样两次快速点击后不会导致随机行为

  • 我在这里看到两种可能性:

  • 在自己的线程中执行繁重的工作
  • 在你执行繁重的工作之前打电话来处理重绘等。顺便说一句,你可以省略这个标志,但我会把它留在那里,这样两次快速点击后不会导致随机行为

  • 谢谢你的#2。它有一个有趣的功能)按钮被禁用(灰色文本),但它仍然被按下(其边框)!我会考虑一下,但在我看来,这个单独的线程是解决这个问题的方法。如果它仍然处于按下状态,请在调用processEvents()之前尝试button->update()或repaint之类的操作,它仍然处于按下状态,因为它没有获得称为“鼠标按钮释放”的用户输入事件)。在这种情况下,setDisabled会在连接到pressed()或clicked()信号的onButtonClicked()插槽上的按钮上ommit其他输入事件吗?对于第一种情况,切换到clicked()会有问题吗?这通常在释放按钮后调用。插槽连接到clicked()信号。最后,我决定使用线程——这在本例中是更合适的方法。它有一个有趣的功能)按钮被禁用(灰色文本),但它仍然被按下(其边框)!我会考虑一下,但在我看来,这个单独的线程是解决这个问题的方法。如果它仍然处于按下状态,请在调用processEvents()之前尝试button->update()或repaint之类的操作,它仍然处于按下状态,因为它没有获得称为“鼠标按钮释放”的用户输入事件)。在这种情况下,setDisabled会在连接到pressed()或clicked()信号的onButtonClicked()插槽上的按钮上ommit其他输入事件吗?对于第一种情况,切换到clicked()会有问题吗?这通常在释放按钮后调用。插槽连接到clicked()信号。最后,我决定使用线程——这在本例中是更合适的方法。
    void MyClass::onButtonClicked(){
        QPushButton *button = static_cast<QPushButton*>(sender());
        button->setDisabled(true);
        performSomeHeavyFunctionFor5or10seconds();
    }