当前位置: 代码迷 >> QT开发 >> qt 下connect 中的SIGNAL(clicked())的有关问题
  详细解决方案

qt 下connect 中的SIGNAL(clicked())的有关问题

热度:500   发布时间:2016-04-25 04:55:45.0
qt 下connect 中的SIGNAL(clicked())的问题
先看代码:
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));
QList<QString> collectlist;
collectlist<<"addr1"<< "addr2"<<"addr3"<<"addr4"<<"<<"addr6" ; 
void MainWindow::on_pushButton_clicked()
{

  int a=collectlist.size();//  
  QString b;
  b=QString::number(a);
  qDebug()<<"length ="+b;}
其中: qDebug()打印为,
"length =6" 
"length =6" 
有两条语句,难道是on_pushButton_clicked()执行了两次???!
SIGNAL(clicked())是触发按钮吧??

------解决方案--------------------
把on_pushButton_clicked()改掉,on_pushButton_clicked()是Qt的默认点击事件,等于点击了两次
------解决方案--------------------
这个说的不完全对,在 QtCreator 的工程中 都会有一句
QMetaObject::connectSlotsByName(MainWindow);
也就是说,他会根据命名规则,自动连接信号和槽。
如果你在手动连接,就是连接了两次。
这个并不是 Qt 的默认事件。
至于命名规则是什么 可以查看 QMetaObject::connectSlotsByName 的帮助。

探讨

把on_pushButton_clicked()改掉,on_pushButton_clicked()是Qt的默认点击事件,等于点击了两次

------解决方案--------------------
探讨

这个说的不完全对,在 QtCreator 的工程中 都会有一句
QMetaObject::connectSlotsByName(MainWindow);
也就是说,他会根据命名规则,自动连接信号和槽。
如果你在手动连接,就是连接了两次。
这个并不是 Qt 的默认事件。
至于命名规则是什么 可以查看 QMetaObject::connectSlotsByName 的帮助。

引用 1……

------解决方案--------------------
2L很详细。
on_pushButton_clicked() 自动连接命名规则。用Qt-creator右键点击Button后选择go to slot项后自动生成的槽的名字就是这个。

自己命名槽的时候还是回避此规则的好。
  相关解决方案