【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
大部分GUI库都会有一个基础功能,那就是怎么把button和回调函数bind在一起。在qt里面,这部分是通过槽函数来实现的。主要的操作方法肯定是这样的,首先用qt designer画出两个控件。其实创建两个槽函数,也就是两个回调函数。最后通过connect函数,把控件和回调函数bind在一起。这样,当我们点击button的时候,就可以进入到这个回调函数里面。
1、创建两个按钮
这一步操作比较简单,就是直接qt designer里面拖两个控件。在ui上面,生成的脚本是这样的,
<widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>140</x><y>220</y><width>93</width><height>28</height></rect></property><property name="text"><string>Calculate</string></property></widget><widget class="QPushButton" name="pushButton_2"><property name="geometry"><rect><x>290</x><y>220</y><width>93</width><height>28</height></rect></property><property name="text"><string>Clean</string></property></widget>
2、创建回调函数
创建回调函数,有一个特别的关键字,就是slots。也就是说,slots后面定义的函数就是回调函数。和控件操作相关的函数,一般都会被定义为槽函数。后面我们会用到的timer定时器,相关函数也是槽函数。
#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication.h"class QtWidgetsApplication : public QMainWindow
{Q_OBJECTpublic:QtWidgetsApplication(QWidget *parent = nullptr);~QtWidgetsApplication();private:Ui::QtWidgetsApplicationClass ui;private slots:void on_calculate_clicked();void on_clean_clicked();
};
至于实现部分,那就是行礼如仪,按照正常的函数去实现就好了,
void QtWidgetsApplication::on_calculate_clicked()
{QString text1;QString text2;text1 = ui.lineEdit->text();if (text1 == ""){QMessageBox::information(this, "tip", "Please input data1!");return;}text2 = ui.lineEdit_2->text();if (text2 == ""){QMessageBox::information(this, "tip", "Please input data2!");return;}int data1 = text1.toInt();int data2 = text2.toInt();data2 *= data1;QMessageBox::information(this, "tip", QString("Final result is ") + QString::number(data2) + QString("!"));
}void QtWidgetsApplication::on_clean_clicked()
{ui.lineEdit->setText("");ui.lineEdit_2->setText("");
}
3、connect绑定
有了控件,有了slots回调函数,下面最重要的工作,就是把两部分内容进行绑定。这部分一般都是在窗口类的构造函数里面完成的。
QtWidgetsApplication::QtWidgetsApplication(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);connect(ui.pushButton, &QPushButton::clicked, this, &QtWidgetsApplication::on_calculate_clicked);connect(ui.pushButton_2, &QPushButton::clicked, this, &QtWidgetsApplication::on_clean_clicked);
}
之所以操作这么简单,就可以实现控件和函数的绑定,本是上说还是因为qt帮我们做了很多额外的工作,比如Q_OBJECT等等。
4、演示效果
有了回调函数,以及ui文件生成的ui_QtWidgetsApplication.h头文件,对于ui中任何资源的操作,都可以通过ui这个对象来完成。基本的qt应用也可以慢慢做出来了。
编译的话,我们把之前的Makefile做成模板,编译就是直接输入make即可。不需要做什么额外的操作。个人觉得,这是比IDE更加便捷的方式。