前一天学习了汉诺塔的实现,又用Qt自己写了一遍。在UI主界面点击PushButton,将根据spinbox的数字作为层数运行汉诺塔函数。

为了严谨,在运行函数之前加了ui->pushButton->setEnabled(false);
函数运行之后运行ui->pushButton->setEnabled(true);

void MainWindow::on_pushButton_clicked()
{ui->pushButton->setEnabled(false);cyuyan();ui->pushButton->setEnabled(true);
}

但运行结果并不是想象的那样,在点击按钮后按钮变灰,运行完成后按钮恢复正常。
而是如下图这样:

如果在卡顿过程中连续点击,将会发生灾难性的后果。。setEnable(false)并没有达到保护的效果。

为了研究为何后面的程序反而先执行了,就在该事件后面加了qDebug()

void MainWindow::on_pushButton_clicked()
{a++;ui->pushButton->setEnabled(false);cyuyan();ui->pushButton->setEnabled(true);qDebug() << "Finish"+QString::number(a);
}

在n=1到5的时候,输出结果都是正常的:


但当n大于5时,就会概率性出现奇怪的事情:
Finish并不是最后输出,而是在程序运行中就输出了

不知道这是一个什么机制。这种情况只好用多线程解决了。

20230423编辑:
通过查找问题,发现造成该现象的原因大概率是Qt在调用C语言进行C++、C混合编程时,在应用程序输出因为Qt是采用的qDebug,C语言是采用的printf,因此造成了显示错位。
在通过debug单步调试过程中,或者单纯只用qDebug时,都是在函数执行完成之后再输出后面的语句。

此外,在点击按钮后控件无法立刻刷新
则是用qApp->processEvents();写在setEnable后面,耗时函数之前即可。

第十七天学习记录:工作相关:Qt控件设置setEnabled(false)的问题。相关推荐

  1. qt 控件设置相对位置_qt设置控件相对位置

    QT关于控件的教程_计算机软件及应用_IT/计算机_专业资料.zl使用Linux... 此例程主要展示用代码方式创建控件并用 Layout 管理类对其进行布局; 例程来自 Qt5.2,如过是默认安装, ...

  2. Qt 控件设置透明和半透明方法汇总

    遇到了好多次控件有需要设置为透明和半透明的情况,每次都是去网上搜一搜,看看别人怎么实现的,浪费了很多时间,故在这里进行一个总结,希望对自己有一个提升. 本文对透明的各种情况进行了分类: 整个窗口及窗口 ...

  3. Vue学习笔记:Element时间控件设置某一个日期禁止选择

    Vue学习笔记:Element时间控件添加一段时间禁止选择 需求:时间控件,当天之前禁止选择,某一个日期的之前时间禁止选择 文档: 代码实现:在时间控件上添加 :picker-options=&quo ...

  4. qt 控件设置相对位置_qt 手动设置控件的位置

    QT中的Layout用着很不错,但有时候你想指定控件绝对位置.用以下红色代码就可以了. chanel1 = new QPushButton(tr("通道1:")); chanel1 ...

  5. qt控件设置图标方法总结

    1.窗口设置图标 this->setWindowIcon(QIcon(":/rabbit.ico")); 2.qtreewidget设置图标 QTreeWidgetItem* ...

  6. Twain的学习记录和基于Qt的相关开源项目详解

    Twain学习记录和基于Qt的开源项目详解 twpp-qml 适用于 C++11 及更高版本的便携式.仅标头 TWAIN 框架. 原项目作者使用Qtwidget基于Twain静态传输一张图片 我基于h ...

  7. Qt学习之显示类的控件(QLabel、QTextBrowser、QGraphicsView、QCalendarWidget、QWebView、QProgressBar、QOpenGLWidget)

    本文转自:<Qt编程指南>        作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 5.5 显示类的控件 本节显示类控件是指作为显示用途的控件,本 ...

  8. 2020.4.23工作记录————Regsvr32加载控件失败:“请确保该二进制存储在指定路径中。。。”

    工作记录----Regsvr32加载控件失败: 之前的OCX控件今天我因为工作需要又重新写了个新的,跟之前不同的是这次的控件链接了第三方的动态库,但是在OCX控件生成完成后我使用管理员身份运行cmd对 ...

  9. opic4:Qt入门之常用qt控件认知之Button系列

    opic4:Qt入门之常用qt控件认知之Button系列 2013-06-27 18:21:54 标签:QAbstractButton QPushButton QRadioButton 原创作品,允许 ...

最新文章

  1. 把整数转换成2的n次方的和数组
  2. linux 查看显卡信息
  3. 十大不变计算机网络安全法则
  4. Vue之旅-Vue环境搭建
  5. 转载: 快速理解Docker - 容器级虚拟化解决方案
  6. php订阅与推送,PHP用户关键词订阅推送文章功能
  7. c语言实验报告上理答案,C语言实验报告江西理工大学实验5
  8. Factory Method (工厂模式)
  9. Sql Server 2005 64位安装包
  10. 联想微型计算机4250怎么拆机,联想T430笔记本拆机增加内存条图解教程
  11. 云计算机运维是什么,云计算运维管理是什么?
  12. 图像处理算法工程师——必备技能
  13. 共模干扰与差模干扰(及其消除)
  14. 为什么写技术博客对新人如此重要
  15. K-means clustering using random matrix sparsification(ICML2018)
  16. 如何通过ua区分QQ内置浏览器与QQ浏览器
  17. 为什么要学习Java?|猿代码科技
  18. net start mysql 提示:发生系统错误 2。 系统找不到指定的文件。
  19. 2021.07.13 B站是这样崩的
  20. GitChat · 人工智能 | 如何零基础用 Keras 快速搭建实用深度学习模型

热门文章

  1. flex布局设置justify-content为space-between,最后一个元素无法右对齐
  2. ExtJS梦想之旅(八)--GridPanel和EditorGridPanel的使用
  3. java vector的排序_java 中vector 排序
  4. windows文件介绍
  5. Yii1.x 国际化三步走
  6. 微信小程序官方接口生成带参数二维码
  7. mysql基础笔记(一)
  8. 2021年12月电子学会青少年软件编程(图形化)等级考试试卷(二级)答案解析
  9. 2 snippets vue 修改配置_Vue - VSCode 基本配置 ESLine Prettier 代碼自動風格化
  10. oracle 11g下载 Oracle 10g下载 Oracle 9i下载