Qt Creator和VS2010中添加槽信号_差异与详解

1.前言:

 

 

Qt  的窗口部件通过发射信号(signal)来表明一个用户的动作已经发生了或者是一个状态已经改变了。如点击一个QPushButton时,按钮会发送一个clicked()信号,信号可以与函数(在qt里称做槽slot)相连接。可以把信号理解为MFC里的事件。信号与槽的关系,我们也可以类比为为,事件驱动关系

利用QT做UI设计的一般分为两派,发烧派采用Qt Creator设计,平台友好,视觉冲击强,流线式设计。微软派采用Visual Studio开发,此派深受微软毒害~ 已经难以自拔~

就个人而言,属于微软派,用久了想脱身也不容易了。

这里需要面对一个问题就是VS与Qt Creator中添加“信号与槽”是不一样的,需要注意。

 

2.Visual Studio2010中添加槽

Step1:创建对话框窗口,选择“创建界面”复选框

Qt Creator和VS2010中添加槽信号_差异与详解

2.头文件中添加“槽声明”

 

 
  1. #ifndef ADDSOLTTOVS_H

  2. #define ADDSOLTTOVS_H

  3.  
  4. #include <QtWidgets/QDialog>

  5. #include "ui_addsolttovs.h"

  6.  
  7. class AddSoltToVs : public QDialog

  8. {

  9. Q_OBJECT

  10.  
  11. public:

  12. AddSoltToVs(QWidget *parent = 0);

  13. ~AddSoltToVs();

  14. private:

  15. Ui::AddSoltToVsClass ui;

  16. ////////槽声明

  17. public slots:

  18. void Btn_Click();

  19. };

  20.  
  21. #endif // ADDSOLTTOVS_H

  22.  
3.源文件中进行“槽实现”(注意添加消息盒子的头文件)
 
  1. #include "addsolttovs.h"

  2. #include <QMessageBox>

  3.  
  4. AddSoltToVs::AddSoltToVs(QWidget *parent)

  5. : QDialog(parent)

  6. {

  7. ui.setupUi(this);

  8. }

  9.  
  10. AddSoltToVs::~AddSoltToVs()

  11. {

  12. }

  13. void AddSoltToVs::Btn_Click()

  14. {

  15. QMessageBox msg;

  16. msg.setText("Hello World!");

  17. msg.exec();

  18. }

4.打开UI,进入Qt Designer,建立槽

 

 

Qt Creator和VS2010中添加槽信号_差异与详解

注意:别把槽的函数名写错了

Qt Creator和VS2010中添加槽信号_差异与详解

 

注意:一定要把Designer关闭了再去调试我们的VS主程序

5.运行结果

Qt Creator和VS2010中添加槽信号_差异与详解

没错,这就意味着,我们成功了。

3.Qt Creator中添加槽过程

诶呀。支持Creator的发烧友们欢呼吧~  的确,很简单~

1.打开 Qt Creator新建一个项目MyQtDemo

Qt Creator和VS2010中添加槽信号_差异与详解

2.点击mainwindow打开设计窗体在窗体上添加一个PushButton。点击右键先把转到槽

Qt Creator和VS2010中添加槽信号_差异与详解

3.打开转到槽窗体

Qt Creator和VS2010中添加槽信号_差异与详解

4.点击clicked()点击确定,在mainwindow.cpp里添加QMesageBox

 

 
  1. #include "mainwindow.h"

  2. #include "ui_mainwindow.h"

  3. #include <QMessageBox>

  4. MainWindow::MainWindow(QWidget *parent) :

  5. QMainWindow(parent),

  6. ui(new Ui::MainWindow)

  7. {

  8. ui->setupUi(this);

  9. }

  10.  
  11. MainWindow::~MainWindow()

  12. {

  13. delete ui;

  14. }

  15.  
  16. void MainWindow::on_pushButton_clicked()

  17. {

  18. QMessageBox msg;

  19. msg.setText("Hello World !");

  20. msg.setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);

  21. msg.setDefaultButton(QMessageBox::Cancel);

  22. msg.exec();

  23. }

5.运行即可。

转载于:https://my.oschina.net/u/1777508/blog/1842420