实现了查找对话框,现在就开始来分析主要代码 http://www.cnblogs.com/wowk/archive/2013/06/01/3112742.html
1 class FindDialog : public QDialog 2 { 3 Q_OBJECT 4 public: 5 explicit FindDialog(QWidget *parent = 0); 6 ~FindDialog(); 7 public slots: 8 void findBtnEnabled(const QString &txt); 9 void findClicked(); 10 void stopClicked(); 11 public slots: 12 void findPrevious_Slot(const QString&txt,Qt::CaseSensitivity cs); 13 void findNext_Slot(const QString&txt,Qt::CaseSensitivity cs); 14 signals: 15 void findNext(const QString &str , Qt::CaseSensitivity cs); 16 void findPrevious(const QString &str , Qt::CaseSensitivity cs); 17 public: 18 ........................ 19 };
看如上的类定义代码:
槽函数的 函数原型的 参数列表一定要和 信号函数的 参数列表相同
槽函数定义的时候 可以定义 访问限定符可以是 public/protected/private slots:
而定义信号函数的时候 限定符 只能写成 signals:
注:类定义的第一行一定要加上 O_OBJECT 这个宏
1 //查找按钮点击槽函数 2 void FindDialog::findClicked() 3 { 4 QString txt = text->text(); 5 //获取是否大小写匹配的状态 6 Qt::CaseSensitivity cs = 7 caseSensCheck->isChecked()?Qt::CaseSensitive: 8 Qt::CaseInsensitive; 9 if(prevCheck->isChecked()) 10 emit findPrevious(txt,cs);//发射向前查找信号 11 else 12 emit findNext(txt,cs);//发射向后查找信号 13 }
在上述代码中
emit findPrevious(txt,cs);//发射向前查找信号
emit findNext(txt,cs);//发射向后查找信号
其中 emit 是Qt中的关键字, 会被C++预处理器 处理成相应的 C++ 代码
在发射一个信号的时候 , 这个关键字是必需的 , 而且后面跟的函数调用 必须是 在类中声明了的 信号函数
1 一个信号可以和多个槽相连接
当相应的信号发生的时候 , 程序会以不确定的顺序 一个接一个的 调用 与其相连接的所有 槽函数
2 一个槽也可以和多个信号相连接
与该槽相连的任何信号发生的时候, 该槽函数都会被调用
3 一个信号可以和另一个信号相连接
通过 connect(A , SIGNAL(sig1()),B , SIGNAL( sig2() )); , 可以将一个信号与另一个信号进行连接 , 当一个信号发射的时候 , 另一个信号也会发射
1 this->connect(this, 2 SIGNAL(findNext(const QString&,Qt::CaseSensitivity)), 3 this, 4 SIGNAL(findPrevious(QString,Qt::CaseSensitivity)));
4、信号与槽的连接 或者 信号与信号的连接 都可以移除
移除 连接 , 只要调用 disconnect() 函数即可
要把信号成功连接到槽(或者连接到另外一个信号) ,宦出雄也是有相同的顺序和相同
的类型:
connect(ftp , SIGNAL(rawCommandReply(int , const QString &)),
this , SLOT(processReply(int , const QString &).));
这里有个例外,如果信号的参数比它所连接的槽的参数多,那么多余的参数将会被直接忽略掉:
另外 : 在链接信号和 槽函数的 时候 , 可以不用connect函数 ,而直接通过遵循一定的命名规则,来让编译器自动连接 信号和槽
命名规则如下:
void on_对象名_signal名( 参数列表);
例如:
void SortDialog::on_cancelBtn_clicked() { this->close(); }
此处的函数 就是与 cancelBtn 对象的 clicked() 信号相连接的 槽函数