0

我是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 。我怎么知道的?

4

2 回答 2

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

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

  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。如果你连接textChangedsetText一对控件之间,你会得到一个无限循环。QML 足够聪明,可以检测到它,但小部件代码 AFAIK 却不是。

于 2013-10-05T18:00:23.750 回答
0

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

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

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

干杯!

于 2014-05-27T10:24:19.303 回答