• 8498阅读
  • 21回复

QLineEdit问题!!!!! [复制链接]

上一主题 下一主题
离线muwanqing
 
只看楼主 倒序阅读 楼主  发表于: 2009-02-19
— 本帖被 XChinux 执行加亮操作(2009-02-19) —
Pusername=lineEdit->text().toAscii().data();
Pusername 是char*

无法从从lineEdit获取用户输入 调试的时候 Pusername显示的不是指向用户输入的字符 

大家帮忙看看哪出错了?
[ 此贴被muwanqing在2009-02-19 14:33重新编辑 ]
离线破烂石头
只看该作者 1楼 发表于: 2009-02-19
Pusername=lineEdit->text().toLocal8Bit().data();    //可能不是这个问题,在非英文环境下不会产生编码的问题
离线muwanqing
只看该作者 2楼 发表于: 2009-02-19
输入的都是字符  没有汉字
离线healgod
只看该作者 3楼 发表于: 2009-02-19
楼主想完成撒功能?
离线muwanqing
只看该作者 4楼 发表于: 2009-02-19
就是输入一行字符    经过运算后  显示出运算后的内容(也是一行字符)
离线破烂石头
只看该作者 5楼 发表于: 2009-02-19
char * QByteArray::data ()
Returns a pointer to the data stored in the byte array. The pointer can be used to access and modify the bytes that compose the array. The data is '\0'-terminated.
Example:
QByteArray ba("Hello world");
char *data = ba.data();
while (*data) {
    cout << "[" << *data << "]" << endl;
    ++data;
}
The pointer remains valid as long as the byte array isn't reallocated or destroyed. For read-only access, constData() is faster because it never causes a deep copy to occur.

文档里面的,最后一句,这个指针只有在QByteArray对象销毁之前有效,但是感觉不应该这样才对。不然data()和constData()似乎没什么区别了,最后一句又似乎意味着data()会做一份拷贝
可以试一下用strcpy拷贝一份。
离线muwanqing
只看该作者 6楼 发表于: 2009-02-19
是不是因为lineEdit没有实例化

我只是用designer做了个界面  然后用多继承方式  直接写代码了
离线healgod
只看该作者 7楼 发表于: 2009-02-19
做了 界面 生成的 _ui.h文件里有将它实例化的代码
离线muwanqing
只看该作者 8楼 发表于: 2009-02-19
那位什么获取不了我输入的字符
离线weizhy
只看该作者 9楼 发表于: 2009-02-19
你把代码贴出来,你这样说可能的原因很多
离线muwanqing
只看该作者 10楼 发表于: 2009-02-19
char encryption::name()
{
    char * Pusername=new char;
      Pusername=lineEdit->text().toAscii().data();
    return *Pusername;
}
只看该作者 11楼 发表于: 2009-02-19
lineEdit->text().toAscii()

这东西在这个函数结束时就销毁了
Pusername指向的东西也就没用了
离线muwanqing
只看该作者 12楼 发表于: 2009-02-19
Pusername=lineEdit->text().toAscii().data();

执行到上面这一行就有问题了  Pusername指向了一个-18的值    无论我输入什么  还是不输入  都是这个值

问题是不是在lineEdit对象上   
只看该作者 13楼 发表于: 2009-02-19
char encryption::name()
{
    char * Pusername=new char;
      Pusername=lineEdit->text().toAscii().data();
  qDebug() << Pusername;
    return *Pusername;
}


这样看看
离线muwanqing
只看该作者 14楼 发表于: 2009-02-19
我把它改成这了  返回char,这样应该可以了   

关键还是获取不了用户的输入
    char name;
    char * Pusername=new char;
    Pusername=lineEdit->text().toAscii().data();
    name=*Pusername;
    return name;

如图  我输入“123”  那么lineEdit->text().toAscii().data()应该返回“123”的地址

可实际情况不是
离线sundp

只看该作者 15楼 发表于: 2009-02-19
    这函数的返回值是 char ?只返回 一个字符?应该返回一个 QString才对吧?
这样试试:
char name[1024];  //一个足够大的char数组
strcpy(name,lineEdit->text().toLocal8Bit());
加密运算处理之后,最后返回时用
return QString(name);

这样应该差不多了。
人境结庐<http://sundp70.blog.163.com>心远地偏
离线muwanqing
只看该作者 16楼 发表于: 2009-02-19
lineEdit->text().toAscii().data()  这个不是返会char*吗???
只看该作者 17楼 发表于: 2009-02-20
引用第15楼sundp于2009-02-19 22:00发表的  :
    这函数的返回值是 char ?只返回 一个字符?应该返回一个 QString才对吧?
这样试试:
char name[1024];  //一个足够大的char数组
strcpy(name,lineEdit->text().toLocal8Bit());
加密运算处理之后,最后返回时用
.......

我估计他在测试看看第一个字符能否返回
只看该作者 18楼 发表于: 2009-02-20
引用第16楼muwanqing于2009-02-19 22:07发表的  :
lineEdit->text().toAscii().data()   这个不是返会char*吗???

是啊,但是返回的char*的有效范围只有在这个函数里,出了就没用了
离线muwanqing
只看该作者 19楼 发表于: 2009-02-20
引用第18楼都市无名者于2009-02-20 00:37发表的  :
是啊,但是返回的char*的有效范围只有在这个函数里,出了就没用了


但是在这个函数里也没返回对 
只看这句就有问题 Pusername=lineEdit->text().toAscii().data();
但不知问题在哪?
离线浪漫天使
只看该作者 20楼 发表于: 2009-02-20
char * Pusername=new char;?????
char * Pusername=new char[1024];!!!!


Pusername = lineEdit->text().toAscii().data();????
strcpy(Pusername , lineEdit->text().toAscii().data());!!!!!!

return Pusername ????
不要临时指针的返回!!!!!!!

感觉你的思路就不对,为什么要通过函数返回得到这个东西呢??

你在加密按键的槽函数一起处理不就可以了么?

比如class::func_jiami()
{
    QString text = lineEdit->text();
    dosomething(text);

//如果用字符串的话
char * Pusername=new char[1024];
strcpy(Pusername , lineEdit->text().toAscii().data());
dosomething(Pusername);

}
[ 此贴被浪漫天使在2009-02-20 11:37重新编辑 ]
离线muwanqing
只看该作者 21楼 发表于: 2009-02-20
搞定了  谢了
快速回复
限100 字节
 
上一个 下一个