我是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。 我怎么知道的?
最佳答案
除非您了解基础知识,否则您将无法使用 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 却没有。
关于c++ - 在 2 个窗口之间传递数据。 Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200598/