首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

关于QT的emit的1点疑问

2013-02-24 
关于QT的emit的一点疑问我是根据C++ QT4编程那本书学的一开始就用了emit#ifndef FINDDIALOG_H #define FIN

关于QT的emit的一点疑问
我是根据C++ QT4编程  那本书学的  一开始就用了emit

#ifndef FINDDIALOG_H 
#define FINDDIALOG_H 
 
#include <QtGui/QDialog> 
 
class QCheckBox; 
class QLabel; 
class QLineEdit; 
class QPushButton; 
 
class FindDialog : public QDialog 

        Q_OBJECT 
 
public: 
        FindDialog(QWidget *parent = 0); 
        ~FindDialog(); 
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); 
private: 
        QLabel *label; 
        QLineEdit *lineEdit; 
        QCheckBox *caseCheckBox; 
        QCheckBox *backwardCheckBox; 
        QPushButton *findButton; 
        QPushButton *closeButton; 
}; 
 
#endif // FINDDIALOG_H

这是.h文件


#include <QtGui> 
#include "finddialog.h" 
 
FindDialog::FindDialog(QWidget *parent) 
        : QDialog(parent) 

        label = new QLabel(tr("Find &what:")); 
        lineEdit = new QLineEdit; 
        label->setBuddy(lineEdit); 
 
        caseCheckBox = new QCheckBox(tr("Match &case")); 
        backwardCheckBox = new QCheckBox(tr("Search &backford")); 
 
        findButton = new QPushButton(tr("&Find")); 
        findButton->setDefault(true); 
        findButton->setEnabled(false); 
 
        closeButton = new QPushButton(tr("Close")); 
 
        connect(lineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(enableFindButton(const QString&))); 
        connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked())); 
        connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); 
 
        QHBoxLayout *topLeftLayout = new QHBoxLayout; 
        topLeftLayout->addWidget(label); 
        topLeftLayout->addWidget(lineEdit); 


 
        QVBoxLayout *leftLayout = new QVBoxLayout; 
        leftLayout->addLayout(topLeftLayout); 
        leftLayout->addWidget(caseCheckBox); 
        leftLayout->addWidget(backwardCheckBox); 
 
        QVBoxLayout *rightLayout = new QVBoxLayout; 
        rightLayout->addWidget(findButton); 
        rightLayout->addWidget(closeButton); 
        rightLayout->addStretch(); 
 
        QHBoxLayout *mainLayout = new QHBoxLayout; 
        mainLayout->addLayout(leftLayout); 
        mainLayout->addLayout(rightLayout); 
        setLayout(mainLayout); 
 
        setWindowTitle(tr("Find")); 
        setFixedHeight(sizeHint().height()); 

 
FindDialog::~FindDialog() 

 

 
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); 
        } 

 
void FindDialog::enableFindButton(const QString &text) 

        findButton->setEnabled(!text.isEmpty()); 



这是对应的cpp文件,请问一下里面的emit有什么用,并没有声明connect将findprevious与其他槽连接成一块啊,那怎样触发事件呢,谢谢

[解决办法]

引用:
引用:引用:引用:emit 就是发出信号的。但是为什么没有与emit后面跟着的槽.那发出信号也没槽接受啊

需要使用connec将该信号与槽建立连接
例如:
FindDialog* dlg = new FindDialog;
connect(dlg, SIGNAL( find……


这个emit是发送信号,还没有建立连接。这个例子是为后面的章节进一步学习做准备的。比如第三章。
我也正在看这本书。

热点排行