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

qt 自动连接信号槽的有关问题

2012-03-26 
qt 自动连接信号槽的问题刚才在看qt assistant 的时候,看到 qt可以自动连接信号槽,就是将 槽的名字设置为v

qt 自动连接信号槽的问题
刚才在看qt assistant 的时候,看到 qt可以自动连接信号槽,就是将 槽的名字设置为
void on_<object name>_<signal name>(<signal parameters>);

所以我自己写了个小程序 验证了一下,但是没有效果,请大家帮我看看

C/C++ code
//头文件#include "ui_test.h"#include <QDialog>#include <QMetaObject>class mydlg:public QDialog,private Ui::testClass{    Q_OBJECTpublic:    mydlg(QWidget *parent=0);private slots:    void on_comboBox_currentIndexChanged(const QString &text);};//源文件#include "mydlg.h"mydlg::mydlg(QWidget *parent){    setupUi(this);    QMetaObject::connectSlotsByName(this);}void mydlg::on_comboBox_currentIndexChanged( const QString &text ){    lineEdit->setText(text);}


comboBox和lineEdit是两个控件的objectname

工程是用vs2008 + qt 4.7.4 实现的 ,不知道为什么没有效果。。

[解决办法]
1. 应该这样吧 ui->setupUi(this);
 QMetaObject::connectSlotsByName()这个函数会在ui->setupUi(this);里被调用执行

2. 试验一把
用go to slot后是这样的
void on_comboBox_currentIndexChanged(int index);
void on_comboBox_currentIndexChanged(QString );
原信号
voidcurrentIndexChanged ( int index )
voidcurrentIndexChanged ( const QString & text )

好像是信号槽机制中,信号中引用参数仅作为值传递,不允许在槽中修改。
不知是否 Qt自动连接信号槽的机制中,加以限制了
http://www.qtcn.org/bbs/read.php?tid=21506
http://kb.cnblogs.com/a/1739744/

http://stackoverflow.com/questions/1935147/argument-type-for-qt-signal-and-slot-does-const-reference-qualifiers-matters

QByteArray QMetaObject::normalizedSignature ( const char * method ) [static]
Qt uses normalized signatures to decide whether two given signals and slots are compatible. Normalization reduces whitespace to a minimum, moves 'const' to the front where appropriate, removes 'const' from value types and replaces const references with values.

热点排行