看到一段代码,有两个小问题。
问题(1):
signals:
void findNext(const QString &str, Qt::CaseSensitivity cs);
void findPrevious(const QString &str, Qt::CaseSensitivity cs);
private slots:
void findClicked();
void enableFindButton(const QString &text);
(以上是信号以及私有槽的声明,关键问题在下面)
void FindDialog::findClicked()
{
QString text = lineEdit->text();
Qt::CaseSensitivity cs = caseCheckBox->isChecked() ? Qt::CaseInsensitive : Qt::CaseSensitive;
if(backwardCheckBox->isChecked()) {
emit findPrevious(text, cs);
}
else {
emit findNext(text, cs);
}
}
在这段代码中,emit是如何起作用的?
问题(2)
QLabel *label;
label = new QLabel(tr("Find &what:"));
QCheckBox *caseCheckBox;
caseCheckBox = new QCheckBox(tr("Match &case"));
那个tr到底是什么意思啊?
------解决方案--------------------
emit是将信号findNext或信号findPrevious发射出去;
tr是Qt中为了国际化而使用的。
------解决方案--------------------
说白了,就是调用findPrevious或者findNext信号对应的槽函数,emit之前,在某个地方,肯定有connect把信号和槽进行关联,关联了之后,emit某个信号,就相当于调用这个信号connect时所关联的槽函数,就这么简单而已。
tr()是为了支持多语言多种字符编码而实现,可以正确显示中文等非assci编码字符
------解决方案--------------------
emit啥事也不干,是给程序员看的
------解决方案--------------------
emit是发出信号 对应的是接收信号
在这之前 应该有QObject::connect(*FindDialog, SIGNAL(), *receiver, SLOT()) 类似的句子
调用emit ..后,对应的SLOT里面的函数就会被调用