糖豆人_编号t41 2023-05-05 20:22 采纳率: 100%
浏览 23
已结题

Qt通过键盘事件改变屏幕文字

Qt 键盘事件求问!
做qt项目的时候遇到了一个无法实现的功能,这个功能应该不难但是就是做不出来,哭了。
就是想要通过按space键在黑屏幕上先后打出一行行的文字来模拟对话(很多游戏不都有这种效果吗)
然后先试图做了根据按键次数判断换文字,然后更新painter来画出文字的两个功能,用connect函数连接信号的时候开始报错,报错信息我也放在下面了,把csdn还有博客园都翻了也找不到解决方案。

img

guide.cpp:17:32: Reference to non-static member function must be called

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-05 22:03
    关注
    • 以下回答由chatgpt基于相关博客总结生成:

      问题解决方案: 首先要在Qt的项目中实现键盘事件的监听,可以在QWidget的派生类的构造函数中加入以下代码:

      this->setFocusPolicy(Qt::StrongFocus); this->setFocus();

      这样就可以让当前widget获得键盘焦点,并监听键盘事件。接下来在widget类中重写keyPressEvent函数来实现按键响应。具体实现如下:

      void Widget::keyPressEvent(QKeyEvent *event){ if(event->key() == Qt::Key_Space){ //根据按键次数判断你要的文字内容 QString text; //调用函数展示文字 updateText(text); } }

      其中updateText函数是用来更新文字的,可以在该函数中根据传入的参数展示相应的文字,示例代码如下:

      void Widget::updateText(QString text){ //展示文字 QPainter painter(this); painter.drawText(50,50,text); //发送update消息来实现界面的重绘 update(); }

      最后使用connect函数将键盘事件与更新文字的函数连接起来即可,示例代码如下:

      connect(this, SIGNAL(textUpdated(QString)), this, SLOT(updateText(QString))); emit textUpdated(text);

      以上就是基本的实现过程,若还有问题可以在代码中加入调试输出来进行排错,例如:

      void Widget::updateText(QString text){ qDebug()<<text; QPainter painter(this); painter.drawText(50,50,text); update(); }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月5日

悬赏问题

  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥20 python忆阻器数字识别
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api