首页 > 编程语言 >【代码片段】Qt6.2.4 C++种的信号和槽

【代码片段】Qt6.2.4 C++种的信号和槽

时间:2022-09-21 22:45:15浏览次数:93  
标签:Qt6.2 void 片段 C++ mainwindow ui cpp include MainWindow

参考

注意

对于哪里需要用到指针,哪里需要地址还不是很明白,逻辑可以参考

环境

环境 版本
windows 10
QT 6.2.4
Qt Creator 8.0.1 (Community)
qmake

项目结构

image

代码思路

mainwindow 调用封装的类的函数,封装的函数处理后会通过发送的信号
通过 connect 方法可以将信号与槽进行连接

  1. mainwindow.cpp 会调用 showclickitem.cpp 的槽函数 void click();
public slots:
    void click();
  1. showclickitem.cpp 的槽函数处理结束后会发送信号 void onNotice();
signals:
    void onNotice();
  1. 在 mainwindow.cpp 的构造函数中连接 showclickitem.cpp 信号 onNotice(),然后调用 mainwindow.cpp 中的槽函数 showKeyContent()
connect(&showClickItem, SIGNAL(onNotice()), this, SLOT(showKeyContent()));

完整代码

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "showclickitem.h"

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void on_pushButton_clicked();
    void on_listWidget_clicked(const QModelIndex &index);
    void showKeyContent();

private:
    Ui::MainWindow *ui;
    ShowClickItem showClickItem;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QListWidgetItem>
#include <QMouseEvent>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

     connect(&showClickItem, SIGNAL(onNotice()), this, SLOT(showKeyContent()));
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    ui->listWidget->addItem(ui->lineEdit->text());
}


void MainWindow::on_listWidget_clicked(const QModelIndex &index)
{
    showClickItem.click();

}

void MainWindow::showKeyContent()
{
    QListWidgetItem *item = ui->listWidget->currentItem();
    qDebug()<<item->text();
}


mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QListWidget" name="listWidget">
    <property name="geometry">
     <rect>
      <x>270</x>
      <y>200</y>
      <width>256</width>
      <height>192</height>
     </rect>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>360</x>
      <y>60</y>
      <width>80</width>
      <height>24</height>
     </rect>
    </property>
    <property name="text">
     <string>追加</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit">
    <property name="geometry">
     <rect>
      <x>340</x>
      <y>110</y>
      <width>113</width>
      <height>23</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

showclickitem.h

#ifndef SHOWCLICKITEM_H
#define SHOWCLICKITEM_H

#include <QObject>

class ShowClickItem : public QObject
{
    Q_OBJECT
public:
    explicit ShowClickItem(QObject *parent = nullptr);

signals:
    void onNotice();

public slots:
    void click();

};

#endif // SHOWCLICKITEM_H

showclickitem.cpp

#include "showclickitem.h"
#include "QDebug"

ShowClickItem::ShowClickItem(QObject *parent)
    : QObject{parent}
{

}

void ShowClickItem::click()
{
    qDebug() << "处理结束发送信号";
    emit  onNotice();
}

标签:Qt6.2,void,片段,C++,mainwindow,ui,cpp,include,MainWindow
From: https://www.cnblogs.com/xiaqiuchu/p/16717448.html

相关文章

  • T1052计算邮资 (信息学一本通C++)
     目录 [题目描述]根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克),基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克......
  • T1051 分段函数(信息学一本通C++)
     目录 [题目描述]编写程序,计算下列分段函数y=f(x)的值。 y=-x+2.5;0<=x<5 y=2-1.5(x-3)(x-3);5<=x<10 y=x/2-1.5;10<=x<20[输入]一个浮点数N......
  • T1054 三角形判断(信息学一本通C++)
     目录 [题目描述]给定三个正整数,分别表示三条线段的长度,判断这三条线段能否构成一个三角形。如果能构成三角形,则输出“yes”,否则输出“no”。[输入]输入共一行,包含......
  • T1053 最大数输出 (信息学一本通C++)
     目录 [题目描述]输入三个整数,数与数之间以一个空格分开。输出一个整数,即最大的整数。[输入]输入为一行,包含三个整数,数与数之间以一个空格分开。[输出]输出一行......
  • T1055 判断闰年 (信息学一本通C++)
     目录 [题目描述]判断某年是否是闰年。如果公元a年是闰年输出Y,否则输出N。[输入]输入只有一行,包含一个整数a(0<a<3000)。[输出]一行,如果公元a年是闰年输出Y,......
  • T1057 简单计算器(信息学一本通C++)
     目录 [题目描述]一个最简单的计算器,支持+,-,*,/四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。然而:   1.如果出现除数为0......
  • T1056点和正方形的关系 (信息学一本通C++)
     目录 [题目描述]有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。如果......
  • T1058 求一元二次方程 (信息学一本通C++)
     目录 [题目描述]求一元二次方程ax^2+bx+c=0的根,其中a不等于0。结果要求精确到小数点后5位。[输入]输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示......
  • T1041奇偶数判断 (信息学一本通C++)
     目录 [题目描述]给定一个整数,判断该数是奇数还是偶数。如果n是奇数,输出odd;如果n是偶数,输出even。[输入]输入仅一行,一个大于零的正整数n。[输出]输出仅一行,如果n......
  • T1043 整数大小比较(信息学一本通C++)
      目录 [题目描述]输入两个整数,比较它们的大小。若x>y,输出>;若x=y,输出=;若x<y,输出<。[输入]一行,包含两个整数x和y,中间用单个空格隔开。0≤x<2^32,−2^31≤y<2^31。......