• 6630阅读
  • 6回复

[提问]灵异事件:为什么SLOT中的语句被执行2次? [复制链接]

上一主题 下一主题
离线mjnewnew
 

只看楼主 倒序阅读 楼主  发表于: 2011-11-30
灵异事件:为什么SLOT中的语句被执行2次?
对话框弹出2次,
环境:WINXP + QT4.7.4 (QT CREATOR 2.3.0)
用向导加的QT GUI程序, 只加了一行connect和一个slot事件, UI上放了个pushButton

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(this->ui->pushButton, SIGNAL(clicked()),
            this, SLOT(on_pushButton_clicked()) );
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QMessageBox::information(NULL,"haha","you've pressed button","okay");
}
//===============================
//main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

离线XChinux

只看该作者 1楼 发表于: 2011-11-30
这是因为,在ui_xxxx.h文件中,通过QMetaObject::connectSlotsByName()方法已经将你的on_pushButton_clicked()与pushButton的lcicked信号连接过一次了,结果你在构造函数里又连接了一次,所以总共连接了两次。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线mjnewnew

只看该作者 2楼 发表于: 2011-11-30
回答的太贴切了。一步到位。
谢谢楼上给力

我把构造函数中的connect去掉就好了, 原来connectSlotsByName() 这么智能啊,能根据名字来自动匹配映射关系啊。
离线heicha001
只看该作者 3楼 发表于: 2011-11-30
看不太懂。。这段代码、、、
安化黑茶 http://www.heicha001.com
离线ninsun

只看该作者 4楼 发表于: 2011-11-30
connectSlotsByName()
这个方法不这么智能的话也就不会叫这个名字了
还有...其实我很好奇到底是如何才会想到用
on_pushButton_clicked()
当槽函数的名字的...我可是经过了很久才知道这样命名就会自动连接了的...
离线roywillow

只看该作者 6楼 发表于: 2011-11-30
难道说对一个信号和一个槽反复connect就会导致信号多次触发槽?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个