鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    关于Qt显示错误的问题

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    qt wsl2 显示相关问题
    2
    2
    230
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • B
      ButterFlyDream
      最后由 编辑

      环境:WSL2 Ubuntu-22.04
      错误:qt无法正常显示中文
      72e9b13d-dab6-427f-98a9-20118ca1ec63-image.png

      #include<QApplication>
      #include<QLabel>
      #include<QString>
      #include "rclcpp/rclcpp.hpp"
      #include "status_interfaces/msg/system_status.hpp"
      using SystemStatus = status_interfaces::msg::SystemStatus;
      
      class SystemDisplay :public rclcpp::Node{
          public:
              SystemDisplay():Node("sys_status_display"){
                  sub = this->create_subscription<SystemStatus>(
                      "sys_status",
                      10,
                      [&](const SystemStatus::SharedPtr msg) -> void{
                          label->setText(get_qstr_from_msg(msg));
                      }
                  );
                  label = new QLabel(get_qstr_from_msg(std::make_shared<SystemStatus>()));
                  label->show();
              }
              QString get_qstr_from_msg(const SystemStatus::SharedPtr msg){
                  std::stringstream show_str;
                  show_str << "===========系统状态可视化显示工具============\n"
                  << "数 据 时 间:\t" << msg->stamp.sec << "\ts\n"
                  << "用  户  名:\t" << msg->host_name << "\t\n"
                  << "CPU使用率:\t" << msg->cpu_percent << "\t%\n"
                  << "内存使用率:\t" << msg->memory_percent << "\t%\n"
                  << "内存总大小:\t" << msg->memory_total << "\tMB\n"
                  << "剩余有效内存:\t" << msg->memory_available << "\tMB\n"
                  << "网络发送量:\t" << msg->net_sent << "\tMB\n"
                  << "网络接收量:\t" << msg->net_recv << "\tMB\n"
                  << "==========================================";
                  return QString::fromStdString(show_str.str());
              }
          private:
              rclcpp::Subscription<SystemStatus>::SharedPtr sub;
              QLabel* label;
      };
      int main(int argc,char** argv){
          rclcpp::init(argc,argv);
          QApplication app(argc,argv);
          auto node = std::make_shared<SystemDisplay>();
          std::thread spin_thread([&]()->void{
              rclcpp::spin(node);
          });
          spin_thread.detach();
          app.exec();
          rclcpp::shutdown();
          return 0;
      }
      

      代码和书上的一样。

      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        在WSL2(Windows Subsystem for Linux 2)环境下运行Qt应用程序时,特别是涉及到图形界面显示的问题,可能会遇到一些特定的挑战。其中,中文显示问题通常与字体设置和字符编码有关。以下是一些可能的解决方案和建议:

        1. 确保Qt支持中文:

          • 确保你的Qt安装包含了中文支持。这通常意味着需要安装包含中文语言的Qt库。
          • 在编译Qt应用时,确保使用了正确的字符编码(通常是UTF-8)。
        2. 配置字体:

          • 在Qt应用程序中,显式设置支持中文的字体。例如,你可以在创建QLabel或其他文本显示组件时设置字体。
          • 使用像SimSun(宋体)或Microsoft YaHei(微软雅黑)这样的字体,这些字体通常支持中文显示。
        3. 环境变量:

          • 确保WSL2的locale设置正确。你可以通过运行locale命令来检查当前的locale设置。
          • 如果需要,你可以通过设置LANG和LC_ALL环境变量来强制使用UTF-8编码,例如:
            export LANG=C.UTF-8
            export LC_ALL=C.UTF-8
            
        4. X11转发:

          • 确保你在Windows上安装了X Server(如VcXsrv或Xming),并且正确配置了WSL2以使用X11转发。
          • 在WSL2中,运行export DISPLAY=:0来设置DISPLAY变量(假设你的X Server运行在默认的:0端口)。
        5. 代码中的字符串处理:

          • 你的代码中使用QString::fromStdString来转换标准字符串到Qt字符串。确保转换前,标准字符串(std::string)是以UTF-8编码的。
          • 在Qt中处理字符串时,尽量使用QString而不是std::string,因为QString内部使用Unicode,能更好地处理国际化问题。
        6. 调试和测试:

          • 尝试在纯Linux环境(非WSL)中运行你的Qt应用,看是否能正确显示中文。这有助于确定问题是否与WSL2相关。
          • 检查Qt应用程序的日志输出,看是否有关于字体或字符编码的错误信息。
        7. 更新和兼容性:

          • 确保你的WSL2、Ubuntu 22.04和Qt版本都是最新的,因为较新的版本可能修复了与字符编码或字体相关的问题。

        通过上述步骤,你应该能够诊断并解决Qt应用在WSL2环境下无法正确显示中文的问题。如果问题依旧存在,可能需要更深入地检查Qt的配置或考虑使用其他显示解决方案。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 条回复 最后回复 回复 引用 0
        • 第一个帖子
          最后一个帖子
        皖ICP备16016415号-7
        Powered by NodeBB | 鱼香ROS