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

等待V 2013-05-11 06:23:38
我通过槽函数从其他窗口类传参过来后,想在当前窗口类的edittext中显示,但是qDebug可以打印出来,edittext中却没有显示,大神告诉下那里有问题吗?

槽函数
void Gprs::receivedata(QString data1)
{
ui->textEdit->setText(tr("") + data1.toUtf8()); //没有显示
qDebug()<<data1; //确实能够打印出data1
}
...全文
759 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
等待V 2013-05-15
  • 打赏
  • 举报
回复
引用 19 楼 chengchaooppo 的回复:
在不同界面间传递信号,你确定你的槽和信号连接正确了?
很确定。。 因为data1已经用qDebug打印出来了
仙人的板板 2013-05-14
  • 打赏
  • 举报
回复
setText不可能显示不出来的, 楼主你确定几个事 1.setText()没有设置空的或者无法显示字符进去 2.其它地方调用了setText()空的进去了, 除了这两个不可能有其它错了.
水军总督 2013-05-14
  • 打赏
  • 举报
回复
QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); 对了,加这句的时候,头文件要加这个#include <QTextCodec>.................................
水军总督 2013-05-14
  • 打赏
  • 举报
回复
显示中文一般不都是在main文件加上这句的吗?:QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); 或者在构造函数加上这句: QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK")); GBK改成utf8试试~~ 当然,不是所有编码问题都只是这几句话。我前阵子自己写了个QFtp上传下载的界面,那就要进行编解码的了。 线程那块,,,我还没学呢。正准备找个时间写写~~ 至于你说到的另一个界面,我不知道你是怎么生成的。我的话,一般都是添加一个Qt设计师界面类,用这个添加的类新建一个对象。接着在原来的类文件中加一个按钮的槽函数,函数内容就是显示这个添加的类的窗口。我这样的话,应该不会涉及到线程的问题吧??!! 互相学习~~求各种大神指教~~
超开心~ 2013-05-14
  • 打赏
  • 举报
回复
在不同界面间传递信号,你确定你的槽和信号连接正确了?
惟有你爱我 2013-05-13
  • 打赏
  • 举报
回复
按8楼的方法试了吗?再说,本来就是data1就是QString,为什么还要转换?
jdwx 2013-05-13
  • 打赏
  • 举报
回复
引用 6 楼 OvDengDai 的回复:
4楼啥意思呢
我的意思是,QLineEdit::SetText();本来就是槽,和你的那个信号直接connect,中间的这些是多余的。
乔巴好萌 2013-05-13
  • 打赏
  • 举报
回复
receivedata这个函数是主线程的吗 看命名貌似是非界面线程 setText前 你先QString str = "xxxx"; 然后setText(str) qDebug()<<str分别看下
乔巴好萌 2013-05-13
  • 打赏
  • 举报
回复
Qt::HANDLE currentThreadId () QThread有上面一个静态方法用于查看当前的线程ID 你试试看下 是否是跨线程的 一般来说,在非界面线程里操作界面线程的widget是非线程安全的
等待V 2013-05-13
  • 打赏
  • 举报
回复
引用 11 楼 kaida1234 的回复:
算了,我自己写一个给你吧~~你参考下~~ 构造函数:

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()有点关系。。
谢谢你了啊,我还是再说一遍我的意思吧 我在主界面里的数据想通过点击按钮打开另一个界面的同时emit信号发送过来,然后新界面打开的同时执行槽函数 把发过来的数据显示到新界面的ui.edittext里, 有人说是跨线程不能操作,新手不懂啊,只是为了个小项目临时看着网上学的。。 .toUtf8()这个以为只是为显示中文就没删。。 小白勿怪
等待V 2013-05-13
  • 打赏
  • 举报
回复
引用 7 楼 xucong198949 的回复:
乱码了没有??
没有
等待V 2013-05-13
  • 打赏
  • 举报
回复
引用 8 楼 openXMPP 的回复:
receivedata这个函数是主线程的吗 看命名貌似是非界面线程 setText前 你先QString str = "xxxx"; 然后setText(str) qDebug()<<str分别看下
setText(str)不能显示 qDebug 能打印出来... 听说可能是跨线程了,qt新手不太懂
水军总督 2013-05-13
  • 打赏
  • 举报
回复
算了,我自己写一个给你吧~~你参考下~~ 构造函数:

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()有点关系。。
xucong198949 2013-05-13
  • 打赏
  • 举报
回复
乱码了没有??
等待V 2013-05-12
  • 打赏
  • 举报
回复
4楼啥意思呢
zk7736 2013-05-11
  • 打赏
  • 举报
回复
小白路过。。。。。。
jdwx 2013-05-11
  • 打赏
  • 举报
回复
void Gprs::receivedata(QString data1)
{
        ui->textEdit->setText(data1);  //没有显示
        qDebug()<<data1;  //确实能够打印出data1
}
都已经是QString还转过来转过去的,为什么呢?
等待V 2013-05-11
  • 打赏
  • 举报
回复
有没有大神来帮忙解决一下啊
等待V 2013-05-11
  • 打赏
  • 举报
回复
等待V 2013-05-11
  • 打赏
  • 举报
回复
在线等,就差这个小问题了...........

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧