我是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。 我该怎么做?
答案 0 :(得分:2)
除非您了解基本原理,否则您不会使用Qt。如果您不了解文档,请阅读随附的大量示例代码。有些人更善于阅读散文,有些人在阅读代码时,这并没有错。请务必这样做:)
QLineEdit
已经处理了自己的击键。没有必要重新实现该功能。
除非您的应用程序正在更改状态,否则信号插槽连接应该是静态的。如果将对象上的信号多次连接到另一个对象上的插槽,则the slot will be called as many times as there are connections。
在一对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不是。
答案 1 :(得分:0)
有点晚了,但是对于看到这个页面的其他人来说,你可以观看我准备好的一些(约30分钟!)youtube视频......
(显示:连接到对话框之间的数据库,对话框,信号和插槽,......)
https://www.youtube.com/watch?v=TEq15So3fUg
干杯!