QT5 从一个窗口中获取的数据无法传递到另一个窗口

Christanmod 2020-03-23 10:49:00
void MainWindow::on_pushButton_clicked()
{


cnt = this->ui->lineEdit->text();
qDebug()<<cnt;
query q;
q.exec();
}

我在主窗口的lineedit中获取了数据cnt;
然后我想把这个cnt传递到另一个dialog query中,
目的是点击pushbutton然后在新的dialog里面显示这个cnt的值。
我在前面已经设置cnt是全局变量了,但是在query中debug这个值,发现是空的,编译是成功的,这是为什么,求解!谢谢
...全文
755 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
跨窗体(cpp)传数据还是用信号和槽好
groveer 2020-03-24
  • 打赏
  • 举报
回复
请问你新new一个MainWindow 这个MainWindow有任何关系么 新对象当然没有值了 在原MainWindow中与query实例进行connect
Christanmod 2020-03-24
  • 打赏
  • 举报
回复
引用 5 楼 groveer 的回复:
建议使用信号槽的方式传值 或者初始化构造
已经换成了信号与槽但是还是不行,求解,谢谢了
Christanmod 2020-03-24
  • 打赏
  • 举报
回复
引用 4 楼 非弋 的回复:
看起来好像没有问题,建议把cnt 有关的代码贴出来 最简单的传递方式是: 在query的构造函数中增加一个QString的参数,直接把cnt传给这个参数就好了
已经换成了信号与槽但是还是不行,求解,谢谢了
Christanmod 2020-03-24
  • 打赏
  • 举报
回复
我换成了信号与槽,但还是不行,第一个项目做的还是有点懵,请各位大佬谅解 mainwindow.cpp void MainWindow::on_pushButton_clicked() { // cnt = this->ui->lineEdit->text(); // qDebug()<<cnt; query q; emit sendData(ui->lineEdit->text()); q.exec(); } query.cpp #include "query.h" #include "ui_query.h" #include <mainwindow.h> #include <QCompleter> #include <QDebug> extern QList<QString> per_lines; extern QString cnt; query::query(QWidget *parent) : QDialog(parent), ui(new Ui::query) { ui->setupUi(this); this->model =new QStandardItemModel; this->model->setHorizontalHeaderItem(0,new QStandardItem("姓名")); this->model->setHorizontalHeaderItem(1,new QStandardItem("电话")); this->model->setHorizontalHeaderItem(2,new QStandardItem("地址")); this->ui->tableView->setModel(model); MainWindow *win = new MainWindow; connect(win, SIGNAL(sendData(QString)),this, SLOT(receiveData(QString))); qDebug()<<cnt; doQuery(cnt); } query::~query() { delete ui; delete this->model; } void query::doQuery(QString cnt) { int row=0; for(int i=0;i<per_lines.length();i++) { QString line=per_lines[i]; line=line.trimmed();//去除字符串开始和末尾的空白 QStringList subs=line.split(" "); // QCompleter *completer = new QCompleter(subs, this); // ui->lineEdit->setCompleter(completer); if(cnt ==subs.at(0)){ // qDebug()<<line; disPlay(row++,subs); } else if(cnt ==subs.at(1)){ disPlay(row++,subs); } else if(cnt ==subs.at(2)){ disPlay(row++,subs); } else break; } } void query::disPlay(int row, QStringList subs) { int i=0; for(i=0;i<3;i++) { this->model->setItem(row,i,new QStandardItem(subs[i])); } // QString ins; // for(i=3;i<subs.length();i++) // { // ins+=subs[i]+" "; // } // this->model->setItem(row,5,new QStandardItem(ins)); } void query::receiveData(QString data) { cnt=data; }
groveer 2020-03-24
  • 打赏
  • 举报
回复
建议使用信号槽的方式传值 或者初始化构造
Christanmod 2020-03-24
  • 打赏
  • 举报
回复
结贴了,谢谢各位
Christanmod 2020-03-24
  • 打赏
  • 举报
回复
引用 9 楼 groveer 的回复:
请问你新new一个MainWindow 这个MainWindow有任何关系么 新对象当然没有值了 在原MainWindow中与query实例进行connect
啊啊啊啊,我傻了!谢谢谢谢,解决了!!
donwmufromdying 2020-03-24
  • 打赏
  • 举报
回复
简单的Dialog示例

class MyDialog : public QDialog {
public :
    MyDialog(QWidget * parent=nullptr);

public slots:
    void setCnt(const QString &inCnt) {
        cnt = inCnt;
        showByCnt();
    }

private slots:
    void showByCnt();  //根据cnt做一些展示    

private :
    QString cnt;
};


//在你的主窗口
void MainWindow::on_pushButton_clicked()
{
    query q;
    q.setCnt(ui->lineEdit->text());
    q.exec();
}
donwmufromdying 2020-03-24
  • 打赏
  • 举报
回复
query类增加成员变量也好,加slot函数也好。构造函数传值也好。唯一最好不要用的就是extern 所谓的全局变量
groveer 2020-03-23
  • 打赏
  • 举报
回复
上面的代码 完全没看到cnt传递过程 如楼主所说 query是个dialog 那么query与cnt的关系是什么 如何将cnt传递进query中 这些都没有体现出来
非弋 2020-03-23
  • 打赏
  • 举报
回复
看起来好像没有问题,建议把cnt 有关的代码贴出来 最简单的传递方式是: 在query的构造函数中增加一个QString的参数,直接把cnt传给这个参数就好了
Christanmod 2020-03-23
  • 打赏
  • 举报
回复
引用 1 楼 groveer 的回复:
上面的代码 完全没看到cnt传递过程 如楼主所说 query是个dialog 那么query与cnt的关系是什么 如何将cnt传递进query中 这些都没有体现出来
我是直接在query.cpp 中声明了extern直接调用的 类似于https://blog.csdn.net/zbw1185/article/details/48519371的第三种方法
Christanmod 2020-03-23
  • 打赏
  • 举报
回复
我是直接在query.cpp 中声明了extern直接调用的 类似于https://blog.csdn.net/zbw1185/article/details/48519371的第三种方法

16,818

社区成员

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

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