• 8020阅读
  • 11回复

一段QLineEdit的代码 运行不同 请大大们帮忙(已解决) [复制链接]

上一主题 下一主题
离线bobpeter84
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-29
很简单的一段代码 就是调用 qlineedit的 settext()自定义SLOT

#include <QMessageBox>
#include "yourclass.h"
testWindows::testWindows()
{
    setGeometry(90, 90, 300, 200);

    QLineEdit *lEdit = new QLineEdit(tr("what's your name"), this);
    lEdit->setGeometry(10, 30, 200, 150);
    QPushButton *pb = new QPushButton(tr("Modfied"), this);
    pb->setGeometry(10, 10, 100, 20);

    connect(pb, SIGNAL(clicked()), this, SLOT(testSlot()));
}
void testWindows::testSlot()
{
    //QMessageBox::about(NULL, tr("show"), tr("give me a test"));
    lEdit->setText(tr("jingjing"));
}

make出 .exe后 一调用connect就出现内存错误
不知道问题出在哪里
烦请大大们指点指点
[ 此帖被bobpeter84在2010-07-08 16:36重新编辑 ]
离线bobpeter84
只看该作者 1楼 发表于: 2010-04-29
救急 请各位帮帮忙 搞了一天 看了帮助 都没点头绪
离线yangfanxing
只看该作者 2楼 发表于: 2010-04-29
connect出现内存错误?
1、QObject::connect(...);?
2、如果错误指向void testWindows::testSlot()这一行,请将QPushButton *pb放在.h文件里定义试试?另外没有layout,这个控件放在哪个位置呢?
PHPWind好恶心。。。不想看这种界面。。。
离线bobpeter84
只看该作者 3楼 发表于: 2010-04-29
用setGeometry布局不需要layout啊
而且我在头文件里已经有QPushButton *pb了
这段程序已经 release出 .exe了 只是执行时click 按钮的时候出现附件中的内存错误
该记忆体不能read什么的
离线dbzhang800

只看该作者 4楼 发表于: 2010-04-29
引用楼主bobpeter84于2010-04-29 13:30发表的 一段QLineEdit的代码 运行不同 请大大们帮忙 :
testWindows::testWindows()
{
    setGeometry(90, 90, 300, 200);
    QLineEdit *lEdit = new QLineEdit(tr("what's your name"), this);
    lEdit->setGeometry(10, 30, 200, 150);
    QPushButton *pb = new QPushButton(tr("Modfied"), this);
    pb->setGeometry(10, 10, 100, 20);
    connect(pb, SIGNAL(clicked()), this, SLOT(testSlot()));
}
void testWindows::testSlot()
{
    //QMessageBox::about(NULL, tr("show"), tr("give me a test"));
    lEdit->setText(tr("jingjing"));
}
.......


两个 lEdit 不是同一个东西!,后者是野指针
离线bobpeter84
只看该作者 5楼 发表于: 2010-04-29
请问怎样实现这个操作呢?
离线liguangzhou
只看该作者 6楼 发表于: 2010-04-29
可以这样试试
槽函数
{
QLineEdit *lEdit =(QLineEdit*)this->child("what's your name");

lEdit ->setText("jkjkljl");

}
离线dbzhang800

只看该作者 7楼 发表于: 2010-04-30
引用第5楼bobpeter84于2010-04-29 15:55发表的  :
请问怎样实现这个操作呢?


将 红色标注 的部分删除!

建议先学习一下C++,然后再用Qt
离线bobpeter84
只看该作者 8楼 发表于: 2010-04-30
QT4 QWidget好像没有child函数列
离线bobpeter84
只看该作者 9楼 发表于: 2010-04-30
谢谢dazhang 谢谢大家 这个问题解决了
不过小弟心中仍然有个疑惑 希望大家不吝赐教

照这个问题来看 我是这样理解的 似乎是说当我在构造函数中使用了指针类型的形式(QLineEdit *lEdit)是不是就是说这个lEdit并不是我在头文件中声明的那个(QLineEdit *lEdit) 或者是说他们指向的不是同一个位置?他是不是在构造函数结束时自己delete掉了?而我在槽函数中使用的这个lEdit却是头文件中声明的那个呢?
在QT中这种构造函数中使用new的机制我还是有点不了解
离线novesky

只看该作者 10楼 发表于: 2010-04-30
显然有错误,构造函数里的那个指针是临时 的,槽里面是用不来的,需要在头文件里定义这个指针才行,然后构造函数里写lEdit=new QLineEdit(.....)
离线bobpeter84
只看该作者 11楼 发表于: 2010-05-04
谢谢大家
快速回复
限100 字节
 
上一个 下一个