当前位置: 首页 > article >正文

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更加便捷的方式。


http://www.kler.cn/a/585022.html

相关文章:

  • Redis 6.2.7安装配置
  • Apache Tomcat漏洞,对其进行升级
  • 【大模型学习】第十九章 什么是迁移学习
  • Flutter_学习记录_实现列表上下拉加载 +实现加载html的数据
  • 贪心算法简介(greed)
  • IP和TCP抓包实验
  • 电路原理(电容 集成电路NE555)
  • 滑动窗口算法-day11(不定长选做)
  • LLM的准确率评估采用什么方式:准确率评估使用的是 `sklearn.metrics` 模块中的 `accuracy_score` 函数
  • AI学习——深度学习核心技术深度解析
  • 父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法
  • Vue前端页面实现搜索框的重置
  • vue3 + xlsx 实现导入导出表格,导出动态获取表头和数据
  • [微服务设计]3_如何构建服务
  • golang从入门到做牛马:第二十二篇-Go语言并发:多任务的“协同作战”
  • 详细解析 ListView_GetEditControl()
  • Linux入门 全面整理终端 Bash、Vim 基础命令速记
  • Xxl-Job学习笔记
  • Vue系统学习day01
  • 258.反转字符串中的单词