当前位置: 代码迷 >> QT开发 >> Qt中的emit解决方法
  详细解决方案

Qt中的emit解决方法

热度:81   发布时间:2016-04-25 04:16:48.0
Qt中的emit
看到一段代码,有两个小问题。
问题(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里面的函数就会被调用
  相关解决方案