c++ - 在 2 个窗口之间传递数据。 Qt

标签 c++ qt window signals slot

我是qt新手,对信号槽机制不是很了解。 这是我的设置。 对话框类(它是一个带有名为“lineEdit”的 lineEdit 的对话框) 主窗口类(也有一个 lineEdit)

我有这个:

void MainWindow::keyPressEvent(QKeyEvent *event) {


    int i=event->key();
    //char z=(char)i;



   // connect(ui->lineEdit, SIGNAL(textChanged(QString)), dialog, SLOT(setText(QString)));

if(i>=48&&i<=57)

{
    QString s= QString::number(i-'0');


    q+=s;
    ui->lineEdit->setText(q);

}

我也想将对话框的 lineEdit 文本设置为 q。 我怎么知道的?

最佳答案

  1. 除非您了解基础知识,否则您将无法使用 Qt。如果您不喜欢理解文档,请阅读随附的大量示例代码。有些人更擅长阅读散文,有些人更擅长阅读代码,这没什么不对。一定要这样做:)

  2. QLineEdit 已经处理了它自己的击键。无需重新实现该功能。

  3. 信号槽连接应该是静态的,除非您的应用程序正在改变状态。如果将一个对象上的信号多次连接到另一个对象上的槽,则 the slot will be called as many times as there are connections .

  4. 在一对 QLineEdits 之间传递数据的惯用方式如下:

    connect(ui->lineEdit, SIGNAL(textEdited(QString)),
            dialog, SLOT(setText(QString)));
    connect(dialog, SIGNAL(textEdited(QString)),
            ui->lineEdit, SLOT(setText(QString)));
    

    您可能希望在 MainWindow 的构造函数中设置此连接,但无论如何您只希望它一次

    您应该使用 textEdited 信号,不是 textChanged 信号。前者在用户与控件交互以更改它时发出。无论文本是由用户更改还是通过调用 setText 以编程方式更改,都会发出后者。如果您在一对控件之间将 textChanged 连接到 setText,就会出现无限循环。 QML 足够聪明,可以检测到它,但小部件代码 AFAIK 却没有。

关于c++ - 在 2 个窗口之间传递数据。 Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200598/

相关文章:

c++ - ReadWrite lock using Boost.Threads(如何转换这个简单的类)

linux - 如何使用 opencv 和 qt 为 Yocto linux 镜像编译程序?

c++ - QByteArray 转换为 char(不是 char* 或 constChar*)

c++ - QWidget::mousePressEvent() 同时在两个小部件上

jquery - 结合 onload 和 onresize (jQuery)

c++ - 在 CPP 中将时间转换为 unix 时间

javascript - 如何将数据从 Ajax 弹出窗口传递到父页面?

c++ - 在 netbeans 的项目中编译单个文件

c++ - 如何在 Solaris 8 SPARC 上启用 _GLIBCXX_USE_C99?

c++ - OpenGL:着色器存储缓冲区映射/绑定(bind)