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分别看下
[解决办法]我的意思是,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()空的进去了,
除了这两个不可能有其它错了.