在两个窗口之间传递数据。 Qt的

时间:2013-10-05 17:26:29

标签: c++ qt window signals slot

我是qt的新手,所以我没有完全获得信号槽机制。 这是我的设置。 Dialog类(一个名为“lineEdit”的lineEdit对话框) mainwindow类(也有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。 我该怎么做?

2 个答案:

答案 0 :(得分:2)

  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以编程方式更改,都会发出后者。如果您在一对控件之间连接textChangedsetText,您将获得无限循环。 QML非常聪明,可以检测到它,但是小部件代码AFAIK不是。

答案 1 :(得分:0)

有点晚了,但是对于看到这个页面的其他人来说,你可以观看我准备好的一些(约30分钟!)youtube视频......

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

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

干杯!