首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

qt 关于信号槽传递的参数有关问题

2013-07-08 
qt 关于信号槽传递的参数问题我通过槽函数从其他窗口类传参过来后,想在当前窗口类的edittext中显示,但是qD

qt 关于信号槽传递的参数问题
我通过槽函数从其他窗口类传参过来后,想在当前窗口类的edittext中显示,但是qDebug可以打印出来,edittext中却没有显示,大神告诉下那里有问题吗?

槽函数  
void Gprs::receivedata(QString data1)
{
        ui->textEdit->setText(tr("") + data1.toUtf8());  //没有显示
        qDebug()<<data1;  //确实能够打印出data1
}

[解决办法]

void Gprs::receivedata(QString data1)
{
        ui->textEdit->setText(data1);  //没有显示
        qDebug()<<data1;  //确实能够打印出data1
}

都已经是QString还转过来转过去的,为什么呢?
[解决办法]
receivedata这个函数是主线程的吗
看命名貌似是非界面线程
setText前
你先QString str = "xxxx";
然后setText(str)
qDebug()<<str分别看下
[解决办法]
引用:
4楼啥意思呢

我的意思是,QLineEdit::SetText();本来就是槽,和你的那个信号直接connect,中间的这些是多余的。
[解决办法]
算了,我自己写一个给你吧~~你参考下~~
构造函数:

connect(发送信号的控件,SIGNAL(一个特定的信号),Gprs,SLOT(Edit));

.cpp文件:

void Gprs::Edit()
{
        ui->textEdit->setText(data1);
        qDebug()<<data1;  
}

.h文件:
data1定位全局变量。。。。

private slots:
    void Edit();

这样应该可以吧?!

如果还是按你本身的代码进行修改的话,
首先我觉得应该不用.toUtf8(),我一般都没用;
其次,就像四楼说的,都已经是QString还转过来转过去干嘛呢??函数里面直接写ui->textEdit->setText(data1);
我估计和.toUtf8()有点关系。。
[解决办法]
Qt::HANDLEcurrentThreadId ()
QThread有上面一个静态方法用于查看当前的线程ID
你试试看下 是否是跨线程的
一般来说,在非界面线程里操作界面线程的widget是非线程安全的
[解决办法]
显示中文一般不都是在main文件加上这句的吗?:QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
或者在构造函数加上这句:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
GBK改成utf8试试~~

当然,不是所有编码问题都只是这几句话。我前阵子自己写了个QFtp上传下载的界面,那就要进行编解码的了。
线程那块,,,我还没学呢。正准备找个时间写写~~

至于你说到的另一个界面,我不知道你是怎么生成的。我的话,一般都是添加一个Qt设计师界面类,用这个添加的类新建一个对象。接着在原来的类文件中加一个按钮的槽函数,函数内容就是显示这个添加的类的窗口。我这样的话,应该不会涉及到线程的问题吧??!!

互相学习~~求各种大神指教~~
[解决办法]
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
对了,加这句的时候,头文件要加这个#include <QTextCodec>.................................
[解决办法]
setText不可能显示不出来的,
楼主你确定几个事
1.setText()没有设置空的或者无法显示字符进去
2.其它地方调用了setText()空的进去了,
除了这两个不可能有其它错了.

热点排行