Linux上位机开发实战(按钮响应)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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_OBJECT
public:
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更加便捷的方式。