在 2 个窗口之间传递数据.铂醇

Passing data between 2 windows. Qt

本文关键字:数据 铂醇 之间 窗口      更新时间:2023-10-16

我是qt的新手,所以我不太了解信号槽机制。这是我的设置。对话框类(这是一个带有名为"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);
}

我也想将对话框的行编辑的文本设置为 q。我该怎么做?

  1. 除非你了解基本原理,否则你不会去Qt的任何地方。阅读它附带的大量示例代码,如果您不喜欢理解文档。有些人更擅长阅读散文,有些人更擅长阅读代码,这并没有错。只要一定要:)

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

  3. 信号槽连接应该是静态的,除非应用程序正在更改状态。如果多次将一个物体上的信号连接到另一个物体上的插槽,则该插槽将被调用的次数与连接数一样多。

  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不是。

有点晚了,但对于其他来看此页面的人,您可以观看我准备的一点(~30分钟!(YouTube视频...

(显示:连接到数据库,对话框,信号和对话框之间的插槽,...

https://www.youtube.com/watch?v=TEq15So3fUg

干杯!