QT不同窗体传输数据,将接收到的数据set到lineedit不显示?请大神指点

riiyn 2018-05-03 06:47:19
在槽函数中将获取到的数据settext到lineedit或者textbrowser,程序运行时数据不显示,是通过setUserData和userData存取数据的。
数据提前绑定在pushbutton上,点击按钮时,发送信号,槽函数接收到信号后解析数据并显示。数据可以正常传输,qdebug可以打印数据,但是设置到UI界面不显示,是需要更新UI吗?如果是,是更新整个UI还是只更新相应的控件呢?刚接触QT,有很多问题,请大神指点。
...全文
1334 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
徐荣波 2019-04-17
  • 打赏
  • 举报
回复
引用 19 楼 RIIYN 的回复:
[quote=引用 18 楼 徐荣波 的回复:]
您好,非常荣幸能看见您的帖子。我是北京某大学的一名研究生,我在编程的时候也遇到了和您类似的问题,由于我编程基础很差,想了很久也没有想出办法,网上也没有类似的资料(除了您这个帖子)。所以,我冒昧的联系您,还请原谅。不知道您是否愿意在百忙之中抽出一点点时间来为我解解惑?如有打扰,万分抱歉。祝好!


刚看到....我也是刚接触,你是什么问题呢?[/quote]


没事没事,我现在也没用QT了,但那个问题依然存在,就是用settext的时候控件上不显示内容,但是在其他地方用这个函数的时候就会显示内容。不知道你的这个问题解决了没有?
徐荣波 2019-04-17
  • 打赏
  • 举报
回复
没事没事,我现在也没用QT了,但那个问题依然存在,就是用settext的时候控件上不显示内容,但是在其他地方用这个函数的时候就会显示内容。不知道你的这个问题解决了没有?
riiyn 2019-04-13
  • 打赏
  • 举报
回复
引用 18 楼 徐荣波 的回复:
您好,非常荣幸能看见您的帖子。我是北京某大学的一名研究生,我在编程的时候也遇到了和您类似的问题,由于我编程基础很差,想了很久也没有想出办法,网上也没有类似的资料(除了您这个帖子)。所以,我冒昧的联系您,还请原谅。不知道您是否愿意在百忙之中抽出一点点时间来为我解解惑?如有打扰,万分抱歉。祝好!
刚看到....我也是刚接触,你是什么问题呢?
徐荣波 2019-02-24
  • 打赏
  • 举报
回复
您好,非常荣幸能看见您的帖子。我是北京某大学的一名研究生,我在编程的时候也遇到了和您类似的问题,由于我编程基础很差,想了很久也没有想出办法,网上也没有类似的资料(除了您这个帖子)。所以,我冒昧的联系您,还请原谅。不知道您是否愿意在百忙之中抽出一点点时间来为我解解惑?如有打扰,万分抱歉。祝好!
riiyn 2018-05-05
  • 打赏
  • 举报
回复
问题已解决,根本原因在于申请了两个内存。。。
riiyn 2018-05-05
  • 打赏
  • 举报
回复
引用 11 楼 goldenhawking 的回复:
1、aname 是不是中文?如果是的,换个英文试试看。 2、使用 connect(this, SIGNAL(sender_loginInfo(QPushButton*)), admwin, SLOT(receveData(QPushButton*)),Qt::QueuedConnection );试试看 3、建议首先在槽中设置一个静态的变量看看

    ui->textBrowser->setText("debug");
    ui->lineEdit_name->setText("debug");
    ui->lineEdit_tel->setText("debug");
如果这都不行,说明是UI有问题!建议看看这几个控件的属性: (1) 有没有什么 password 开关被打开 (2)有没有自定义stylesheet,把前景背景搞一样色彩了。看看全选后,能不能从控件切出文字?
恩,问题已解决,谢谢
_LinGM 2018-05-04
  • 打赏
  • 举报
回复
从贴出的代码上看,能在receveData()槽能打印出值,就不会有问题。
_LinGM 2018-05-04
  • 打赏
  • 举报
回复
一般调用控件的setText()方法就能显示再控件上了。 建议贴出代码。
riiyn 2018-05-04
  • 打赏
  • 举报
回复
引用 5 楼 Marcelxx 的回复:
一步步跟,看admindata->arealname等的值是什么,打印出来蛮
打印出来的,是正常的数据,qdebug可以正常打印admindata->arealname等的值,但是setText到控件就是不显示,很无奈啊,用VS调试admindata->arealname等也是有正常的数据的
Marcelxx 2018-05-04
  • 打赏
  • 举报
回复
一步步跟,看admindata->arealname等的值是什么,打印出来蛮
  • 打赏
  • 举报
回复
1、aname 是不是中文?如果是的,换个英文试试看。 2、使用 connect(this, SIGNAL(sender_loginInfo(QPushButton*)), admwin, SLOT(receveData(QPushButton*)),Qt::QueuedConnection );试试看 3、建议首先在槽中设置一个静态的变量看看

    ui->textBrowser->setText("debug");
    ui->lineEdit_name->setText("debug");
    ui->lineEdit_tel->setText("debug");
如果这都不行,说明是UI有问题!建议看看这几个控件的属性: (1) 有没有什么 password 开关被打开 (2)有没有自定义stylesheet,把前景背景搞一样色彩了。看看全选后,能不能从控件切出文字?
  • 打赏
  • 举报
回复
另外这种绑定userData的方法比较拗口,一般不这样做。 动态的临时数据类型,如字段等等,一般可以用 QDataStream 封装后直接通过信号与槽发出去。由于QDataStream具备了修改时拷贝功能,也就是说作为参数传递的都是引用,不发生深拷贝,所以效率比较高。
riiyn 2018-05-04
  • 打赏
  • 举报
回复
引用 9 楼 Marcelxx 的回复:
[quote=引用 6 楼 weixin_42074296 的回复:] [quote=引用 5 楼 Marcelxx 的回复:] 一步步跟,看admindata->arealname等的值是什么,打印出来蛮
打印出来的,是正常的数据,qdebug可以正常打印admindata->arealname等的值,但是setText到控件就是不显示,很无奈啊,用VS调试admindata->arealname等也是有正常的数据的[/quote] 是频繁调用这个setText函数么,那你试试设置一个死的text到lineedit上。[/quote] 一个槽函数里最多调用十几次,试过,设置一个死的text也不显示,但是放在构造函数里就正常显示,我在想是不是槽函数里响应完了要更新控件或者更新ui整个界面。
Marcelxx 2018-05-04
  • 打赏
  • 举报
回复
引用 6 楼 weixin_42074296 的回复:
[quote=引用 5 楼 Marcelxx 的回复:] 一步步跟,看admindata->arealname等的值是什么,打印出来蛮
打印出来的,是正常的数据,qdebug可以正常打印admindata->arealname等的值,但是setText到控件就是不显示,很无奈啊,用VS调试admindata->arealname等也是有正常的数据的[/quote] 是频繁调用这个setText函数么,那你试试设置一个死的text到lineedit上。
riiyn 2018-05-04
  • 打赏
  • 举报
回复
引用 7 楼 YIZI_LinRL 的回复:
从贴出的代码上看,能在receveData()槽能打印出值,就不会有问题。
是啊,能打印出来,放在控件上就不显示,不知道为什么
riiyn 2018-05-04
  • 打赏
  • 举报
回复
引用 1 楼 YIZI_LinRL 的回复:
一般调用控件的setText()方法就能显示再控件上了。 建议贴出代码。
你好,我就是调用的settext,但是不显示,代码在三楼哈。
riiyn 2018-05-04
  • 打赏
  • 举报
回复
贴出代码,数据从widget发送到mainwindow. admin_mainwindow.cpp
admin_MainWindow::~admin_MainWindow()
{
    delete ui;
}

void admin_MainWindow::receveData(QPushButton *btn){
    adminData *admindata = (adminData *)(btn->userData(Qt::UserRole));
    qDebug() << admindata->aname;
    ui->textBrowser->setText(admindata->aname);
    ui->lineEdit_name->setText(admindata->arealname);
    ui->lineEdit_tel->setText(admindata->tel);

    qDebug() << "end";


}
login_widget.cpp

adminData *admindata = new adminData();
admindata->aid = query.value(0).toInt();
admindata->aname = query.value(1).toString().trimmed();
admindata->apassword = query.value(2).toString().trimmed();
admindata->arealname = query.value(3).toString().trimmed();
admindata->tel = query.value(4).toString().trimmed();
admindata->status = query.value(5).toString().trimmed();

ui->pushButton_login_2->setUserData(Qt::UserRole,admindata);
 emit sender_loginInfo(ui->pushButton_login_2);

admin_MainWindow* admwin = new admin_MainWindow;
 connect(this, SIGNAL(sender_loginInfo(QPushButton*)), admwin, SLOT(receveData(QPushButton*)));
login_widget.h
struct adminData : QObjectUserData{
    int aid;
    QString aname;
    QString apassword;
    QString arealname;
    QString tel;
    QString status;
};
Q_DECLARE_METATYPE(adminData)
riiyn 2018-05-04
  • 打赏
  • 举报
回复 1
贴出代码,数据从widget发送到mainwindow.
admin_mainwindow.cpp
[code=c++]admin_MainWindow::~admin_MainWindow()
{
delete ui;
}

void admin_MainWindow::receveData(QPushButton *btn){
adminData *admindata = (adminData *)(btn->userData(Qt::UserRole));
qDebug() << admindata->aname;
ui->textBrowser->setText(admindata->aname);
ui->lineEdit_name->setText(admindata->arealname);
ui->lineEdit_tel->setText(admindata->tel);

qDebug() << "end";


}[/code]
login_widget.cpp
[code=c++]adminData *admindata = new adminData();
admindata->aid = query.value(0).toInt();
admindata->aname = query.value(1).toString().trimmed();
admindata->apassword = query.value(2).toString().trimmed();
admindata->arealname = query.value(3).toString().trimmed();
admindata->tel = query.value(4).toString().trimmed();
admindata->status = query.value(5).toString().trimmed();

ui->pushButton_login_2->setUserData(Qt::UserRole,admindata);

emit sender_loginInfo(ui->pushButton_login_2);[/code]
[code=c++] admin_MainWindow* admwin = new admin_MainWindow;
connect(this, SIGNAL(sender_loginInfo(QPushButton*)), admwin, SLOT(receveData(QPushButton*)));[/code]
login_widget.h
[code=c++]struct adminData : QObjectUserData{
int aid;
QString aname;
QString apassword;
QString arealname;
QString tel;
QString status;
};
Q_DECLARE_METATYPE(adminData)[/code]

16,215

社区成员

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

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