【问题标题】:Issue with Qt slider signal/GUIQt 滑块信号/GUI 问题
【发布时间】:2010-01-07 22:19:50
【问题描述】:

当用户移动滑块时,它会触发一个信号,基于此我想从dataClass 调用一个方法readData,返回一个字符串,然后在guiClass 中打印它。但它不起作用。我收到程序接收信号:“EXC_BAD_ACCESS”。我正在使用Xcode。只要我移动滑块,程序就会崩溃并突出显示第 9 行。

 1  //---guiClass---
 2  guiClass::guiClass(QWidget *parent) : QWidget(parent)
 3  {
 4      connect(slider, SIGNAL(sliderMoved(int)), this, SLOT(slider_Moved(int)));
 5  }
 6  void guiClass::slider_Moved(int val)
 7  {
 8      //Don't worry about val for now.
 9      cout << dataClassPtr->readData(val) << endl;
10  }

    //---dataClass---
    char* dataClass::readData(int lines) {
       char *str = "hello world";
       return str;
    }

【问题讨论】:

  • 我使用了
     标签,但我不知道为什么代码显示不正确!!!
  • 代码每行缩进4个空格,它将为您格式化。

标签: xcode user-interface qt slider


【解决方案1】:
  1. 使用调试器(如果您不知道如何操作,请学习 :-)
  2. 验证dataClassPtr 指向dataClass 的有效实例
  3. char *str = "hello world" 错误(字符串文字是 const;应该是 const char* str
  4. 为什么不让readData 改为返回QString

【讨论】:

    【解决方案2】:

    dataClass::readData中的指针str是在栈上分配的。函数返回后就不能使用了。

    尝试类似:

    QString* dataClass::readData(int lines) 
    {
        return new QString("hello world"); 
    }
    

    完成后不要忘记删除 QString

    【讨论】:

    • 所以如果我使用 calloc 为 str 分配内存然后返回一个指向它的指针?这行得通吗?
    • 应该可以。或者使用 new() 创建一个 QString
    • 我尝试了以下方法: char* dataClass::readData(int lines) char *memData = (char *)calloc(30, sizeof(char)); char *data = "你好世界"; sprintf(memData, "%s", 数据);返回内存数据; } 但没有运气!!!我做错了什么??
    • 字符串数据不需要calloc,指向字符串的指针需要它。
    • char *str = "你好世界";甚至不应该编译(或者应该给你一个关于被弃用的警告)。 "hello world" 是 const,所以应该是 char const* str。
    猜你喜欢
    • 2011-10-29
    • 2020-10-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2021-01-02
    • 2022-01-01
    相关资源
    最近更新 更多