运行成功后的界面
用qt designer随便做了个界面,然后放上VS2010去。界面成功运行了,但是按钮事件一直失败,点击毫无反应。Debug了一下发现QObject::connect(pushButton,SIGNAL(clicked()),this,SLOT(add()));的返回值是false。但是QObject::connect(pushButton,SIGNAL(clicked()),this,SLOT(reject()));却是可以将窗口关掉的。然后就折腾了一上午没成功........
失败的代码
namespace Ui {
class Calculate: public Ui_Dialog,public QDialog {
public:
Calculate(QWidget *parent = 0):QDialog(parent){
setupUi(this);
QObject::connect(pushButton,SIGNAL(clicked()),this,SLOT(add()));
}
private slots:
void add(){
lcdNumber->display(lcdNumber->value()+1);
}
void minus(){
lcdNumber->display(lcdNumber->value()-1);
}
void multiply(){
lcdNumber->display(lcdNumber->value()*2);
}
};
} // namespace Ui
然后乱玩半天,成功的代码如下:
namespace Ui {
class Calculate: public QDialog,public Ui_Dialog {
Q_OBJECT
public:
Calculate(QWidget *parent = 0):QDialog(parent){
setupUi(this);
QObject::connect(pushButton,SIGNAL(clicked()),this,SLOT(add()));
QObject::connect(pushButton_2,SIGNAL(clicked()),this,SLOT(minus()));
QObject::connect(pushButton_3,SIGNAL(clicked()),this,SLOT(multiply()));
}
private slots:
void add(){
lcdNumber->display(lcdNumber->value()+1);
}
void minus(){
lcdNumber->display(lcdNumber->value()-1);
}
void multiply(){
lcdNumber->display(lcdNumber->value()*2);
}
};
} // namespace Ui
做出的修改有:
1、把public Ui_Dialog和public QDialog调换位置。
2、加入Q_OBJECT生成moc_ui_calculate.cpp文件。
第1步没有的话会出现undeclared identifier(未定义变量)的错误。
第2个会导致SLOT槽没有写入文件导致信号无法发送到这个槽上。
该程序源码地址:http://download.csdn.net/detail/u013580497/9123951