QT——tableWidget-跳变之舞V1.0-记录学习【1】

QT——tableWidget-跳变之舞V1.0-记录学习【1】


文章目录

  • QT——tableWidget-跳变之舞V1.0-记录学习【1】
  • 前言
  • 一、利用QT创建项目文件
    • 1.1 完整项目文件如下图所示:
    • 1.2 演示:
  • 二、声明文件:
    • 2.1 主界面声明文件:mainwindow.h;
    • 2.2 控制窗口声明文件:form.h;
    • 2.3 线程声明文件:mythread.h;
  • 三、源文件:业务逻辑实现
    • 3.1 主界面逻辑文件:mainwindow.cpp;
    • 3.2 控制窗口逻辑文件:form.cpp;
    • 3.3 线程逻辑文件:mythread.cpp;
    • 3.4 主界面监控及显示:main.cpp;
  • 四、UI设计文件:
    • 4.1 控制窗口UI文件form.ui;
    • 4.2 主界面UI文件mainwindow.ui;
  • 五、qrc资源文件:
  • 六、个人初步理解QT信号与槽函数的建立及通讯;
    • 演示:


前言

学习QT-tableWidge的部分使用方法,自制跳变表格娱乐小工具 V1.0(* ̄︶ ̄)


一、利用QT创建项目文件

备注:此处不讲解如何新建项目,创建项目。

1.1 完整项目文件如下图所示:

在这里插入图片描述

  1. Headers文件夹下的文件为头文件,主要是声明定义文件;
  2. Sources文件夹下的文件为源文件,主要是功能实现文件;
  3. Forms文件夹下的文件为ui文件,主要是UI设计文件;
  4. Resources文件夹下的文件为qrc文件,主要是放入资源文件;
  5. Other files文件夹下的文件为其他文件;

1.2 演示:

在这里插入图片描述


二、声明文件:

包括:主界面声明文件:mainwindow.h,控制窗口声明文件:form.h,线程声明文件:mythread.h;

2.1 主界面声明文件:mainwindow.h;

//这段代码的作用是防止头文件的重复包含,确保在编译过程中每个源文件只包含一次该头文件。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <form.h>
#include <mythread.h>//QT_BEGIN_NAMESPACE是Qt框架中的一个宏定义,用于定义一个命名间。
QT_BEGIN_NAMESPACE
//C++中,命名空间使用namespace来声明,并使用{ }来界定命名空间的作用域
namespace Ui { class MainWindow; }
QT_END_NAMESPACE//类
class MainWindow :public QMainWindow //关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。
{Q_OBJECT //Q_OBJECT是Qt框架中用于支持信号与槽机制、动态属性和反射等特性的宏定义。public://带有一个参数的构造函数,参数类型为QWidget指针,参数名为parent。构造函数使用了默认参数值nullptr,表示如果没有传递参数,则parent将被设置为nullptr。MainWindow(QWidget *parent = nullptr);//这是一个默认析构函数,没有任何参数。析构函数在对象被销毁时自动调用,用于释放对象所占用的资源。~MainWindow();//覆写closeEvent函数void closeEvent(QCloseEvent *);// private slots是Qt框架中的一种特殊声明,用于定义私有的槽函数。槽函数是用于响应信号的函数,而私有的槽函数只能在类内部被调用。private slots:void onMenuButtonClicked();void getStr(QString &,QString &,QString &);private://Ui::MainWindow是一个类,通常用于设计和管理主窗口的用户界面。//一个指向MainWindow类的对象的指针Ui::MainWindow *ui;private:Form *configWindow = new Form;void onshuju();private:void settable();void addrowcolum(QString &,QString &,QString &);private:void returnNumber();void tiaobian();void threadqidong(int value);MyThread *thread = new MyThread;//创建信号signals:void mainWidgetStr(QString &,QString &);//创建槽函数private slots:void tiaobiansloat(int value);};
#endif // MAINWINDOW_H

2.2 控制窗口声明文件:form.h;

#ifndef FORM_H
#define FORM_H#include <QWidget>namespace Ui {
class Form;
}class Form : public QWidget
{Q_OBJECTpublic:explicit Form(QWidget *parent = nullptr);~Form();private slots:void on_pushButton_clicked();void mainWidgetStr(QString &str,QString &strs);void on_pushButton_3_clicked();void on_pushButton_2_clicked();private:Ui::Form *si;private:void show_ui();signals:void setStr(QString &str,QString &strs,QString &);
};#endif // FORM_H

2.3 线程声明文件:mythread.h;

#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>class MyThread : public QThread
{Q_OBJECTpublic:explicit MyThread(QObject *parent = 0);void stop();void sleeptimeset(int);protected:void run();private:volatile bool stopped;signals:void sendinfo(int);
};#endif // MYTHREAD_H

三、源文件:业务逻辑实现

包括:主界面逻辑文件:mainwindow.cpp,控制窗口逻辑文件:form.cpp,线程逻辑文件:mythread.cpp,主界面监控:main.cpp;

3.1 主界面逻辑文件:mainwindow.cpp;

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>  //C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息
#include "form.h"
#include "qmessagebox.h"
#include "qevent.h"
#include "QTableWidget"
#include <QTableWidgetItem>
#include <QIcon>
#include <QDir>
#include <QDebug>
#include <QRandomGenerator>//using namespace std; 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念
using namespace std;int ret = 1;
int randomNumber0 = 0;
int randomNumber1 = 0;
int randomNumber2 = 0;
int numbers =0;
char a[12] = { 0 }; //是一个长度为12的字符数组,并且数组中每个元素都被初始化为0。
double decimalNum = 0.1;MainWindow::MainWindow(QWidget *parent):QMainWindow(parent),ui(new Ui::MainWindow)//MainWindow::MainWindow(QWidget *parent)构造函数的作用是创建MainWindow类的对象,并初始化其UI界面{ui->setupUi(this);  //初始化UI// 连接信号和槽//ui->tool是一个指向用户界面中的工具按钮的指针。&QAction::triggered是一个信号,表示当工具按钮被触发时发出的信号。//this是指向当前窗口对象的指针,而MainWindow::onMenuButtonClicked是一个槽函数,表示当工具按钮被触发时要执行的函数。connect(ui->tool, &QAction::triggered, this, &MainWindow::onMenuButtonClicked);/*configWindow为发出信号的对象,SIGNAL(setStr(QString&))为信号,this为接收信号的对象,SLOT(getStr(QString&))为槽函数。* 意思是当configWindow对象发送setStr信号时,this对象的getStr槽函数将被调用,并且会传递一个QString类型的参数。* 这种机制使得对象间的通信更加灵活方便。*/connect(configWindow,SIGNAL(setStr(QString&,QString &,QString &)), this, SLOT(getStr(QString&,QString &,QString &)));//连接信号和槽函数connect(thread,SIGNAL(sendinfo(int)), this, SLOT(tiaobiansloat(int)));// 设置窗口标题this->setWindowTitle("QT5.1 ");this->setWindowIcon((QIcon(":/build-00000-Desktop_Qt_5_14_2_MinGW_64_bit-Release/main.jpg")));settable();//获取坐标// 获取窗口四个角的坐标QRect rect = this->geometry();  // 获取窗口位置和大小int x1 = rect.x();              // 左上角x坐标int y1 = rect.y();              // 左上角y坐标int x2 = x1 + rect.width();     // 右上角x坐标int y2 = y1;                    // 右上角y坐标
//    int x3 = x2;                    // 右下角x坐标
//    int y3 = y1 + rect.height();    // 右下角y坐标
//    int x4 = x1;                    // 左下角x坐标
//    int y4 = y3;                    // 左下角y坐标qDebug() <<"右上角x,y坐标:"<<x2 <<y2 ;this->move(500,250);     //窗口打开位置设置
}void MainWindow::onshuju()
{if (ret == 0){configWindow->show();cout<<  "open new window" << endl;}else{configWindow->close();cout<<  "close new window" << endl;}}void MainWindow::getStr(QString &str,QString &strs,QString &text)
{qDebug() << "主界面接收数据:"<< str << strs <<text;addrowcolum(str,strs,text);//发送信号到控制窗口//emit mainWidgetStr(str,strs);//将字符串转为浮点数decimalNum = str.toDouble();//跳变业务逻辑启动控制if(strs == "start_putton"){qDebug() << "启动按钮....";threadqidong(1);}else if (strs == "stop_putton"){qDebug() << "停止按钮....";threadqidong(2);}}void MainWindow::addrowcolum(QString &str1,QString &str2,QString &text)
{int shuju = str2.toInt();if (text== "增加" and str1 == "列设置"){for(int shuzhi=0;shuzhi<shuju;shuzhi++){int number = ui->tableWidget->columnCount();ui->tableWidget->insertColumn(number);}}else if ((text== "增加" and str1 == "行设置")){for(int shuzhi=0;shuzhi<shuju;shuzhi++){int number = ui->tableWidget->rowCount();ui->tableWidget->insertRow(number);}}else if ((text== "删除" and str1 == "行设置")){for(int shuzhi=0;shuzhi<shuju;shuzhi++){int number = ui->tableWidget->rowCount();ui->tableWidget->removeRow(number-1);}}else if ((text== "删除" and str1 == "列设置")){for(int shuzhi=0;shuzhi<shuju;shuzhi++){int number = ui->tableWidget->columnCount();ui->tableWidget->removeColumn(number-1);}}
}void MainWindow::tiaobiansloat(int value)
{// qDebug()<< "设置睡眠时间:" <<decimalNum;// 设置睡眠时间thread->sleeptimeset(decimalNum*1000);tiaobian();}void MainWindow::threadqidong(int value)
{if (value == 1){qDebug() << "启动线程...";//启用线程thread->start();}else if(value == 2){qDebug() << "停止线程...";thread->stop();}
}void MainWindow::tiaobian()
{QTableWidgetItem *item;for(int row = 0; row < ui->tableWidget->rowCount(); row++){for(int column = 0; column < ui->tableWidget->columnCount(); column++){item = new QTableWidgetItem();item->setTextAlignment(Qt::AlignCenter); //居中returnNumber();item->setBackground(QColor(randomNumber0, randomNumber1, randomNumber2));  //设置颜色//设置单元格内容item->setText(a);//qDebug() << "Number: " << a;ui->tableWidget->setItem(row, column, item);}}
}void MainWindow::onMenuButtonClicked()
{ret = 0;cout << "===start Sucess=====" << endl;connect(this,SIGNAL(mainWidgetStr(QString&,QString &)), configWindow, SLOT(mainWidgetStr(QString&,QString &)));onshuju();ret = 1;
}void MainWindow::closeEvent(QCloseEvent *event)
{// 在这里编写关闭窗口时的处理逻辑QMessageBox::StandardButton button = QMessageBox::question(this, "确认关闭", "确定要关闭窗口吗?", QMessageBox::Yes | QMessageBox::No);if (button == QMessageBox::Yes){onshuju();// 用户确认关闭窗口,调用父类的closeEvent()函数关闭窗口event->accept();}else {// 用户取消关闭窗口,忽略该事件event->ignore();}
}void MainWindow::settable()
{//设置表格表头的样式ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:lightblue;}");ui->tableWidget->resizeColumnsToContents();//自动调整表格控件的列宽,使得表格中的内容能够全部显示出来。ui->tableWidget->resizeRowsToContents();  //用于自动调整表格控件的行高,使得表格中的内容能够全部显示出来ui->tableWidget->horizontalHeader()->setStretchLastSection(true);//Qt中设置表格控件中表头自适应宽度的方法之一。//水平表头栏的单元格大小模式为拉伸模式,即根据控件的大小自动调整每一列的宽度,使得每一列的宽度都相等。这种设置可以使得表格数据更加美观和易于查看。ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); //将第一列的宽度调整为其内容的宽度。ui->tableWidget->setWordWrap(true);//设置表格控件的自适应行高属性为true//设置所有内容居中QTableWidgetItem *item; //指向QTableWidgetItem对象的指针for(int row = 0; row < ui->tableWidget->rowCount(); row++){for(int column = 0; column < ui->tableWidget->columnCount(); column++){item = new QTableWidgetItem();item->setTextAlignment(Qt::AlignCenter); //居中returnNumber();item->setBackground(QColor(randomNumber0, randomNumber1, randomNumber2));  //设置颜色//设置单元格内容item->setText(a);//qDebug() << "Number: " << a;ui->tableWidget->setItem(row, column, item);}}// 禁止编辑单元格ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);QString path = QDir::currentPath();//打印工作路径qDebug() << path;//获取表格长度和宽度int width1 = ui->tableWidget->width();int height1 = ui->tableWidget->height();cout<<"width:" << width1 <<endl;cout<<"height:" << height1 <<endl;ui->tableWidget->verticalHeader()->setDefaultSectionSize(30); //设置所有行的高度cout<<"table edit over!" << endl;
}void MainWindow::returnNumber()
{// 生成一个介于0到256之间的随机数randomNumber0 = QRandomGenerator::global()->bounded(256);randomNumber1 = QRandomGenerator::global()->bounded(256);randomNumber2 = QRandomGenerator::global()->bounded(256);//    qDebug() << "Random Number: " << randomNumber1;//    qDebug() << "Random Number: " << randomNumber2;numbers = QRandomGenerator::global()->bounded(11);//将整数类型的变量numbers格式化成字符串类型,然后将格式化后的字符串存储到字符数组a中。//其中,第二个参数12表示字符数组a的大小,第三个参数"%d"表示将整数按十进制格式输出到字符串中。//如果格式化后的字符串长度超过了11个字符(包括’\0’),则会在字符数组a的末尾加上’\0’截断字符串,确保不会发生溢出。snprintf(a,12,"%d",numbers);}MainWindow::~MainWindow()
{//delete ui; 是一个用于释放动态分配的内存的操作。在C++中,//当我们使用new关键字创建一个对象时,需要使用delete关键字来释放这个对象所占用的内存空间,以防止内存泄漏。cout << "relase neicun" << endl;delete ui;}

3.2 控制窗口逻辑文件:form.cpp;

#include "form.h"
#include "ui_form.h"
#include <iostream>  //C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息
#include <QDebug>using namespace std;/*控制窗口 */Form::Form(QWidget *parent) :QWidget(parent),si(new Ui::Form)
{si->setupUi(this);this->setWindowIcon((QIcon(":/build-00000-Desktop_Qt_5_14_2_MinGW_64_bit-Release/form.jpg")));this->move(1268,250);     //窗口打开位置设置this->setWindowTitle("控制窗口 ");
}Form::~Form()
{cout<<"close Form" << endl;delete si;
}void Form::on_pushButton_clicked(){QString text = si->pushButton->text();//获取设置项QString sets = si->comboBox_2->currentText();//获取行数据QString a = si->comboBox->currentText();//发送信号到主界面emit setStr(sets,a,text);}void Form::mainWidgetStr(QString &str,QString &strs)
{qDebug() << "控制窗口接收数据:" << strs << str;
}void Form::show_ui()
{this->show();}//启动跳变
void Form::on_pushButton_3_clicked()
{QString text = si->pushButton_3->text();if (text == "启动"){QString sets = "start_putton";//获取跳变速度QString a = si->comboBox_3->currentText();//发送信号到主界面emit setStr(a,sets,text);si->pushButton_3->setText("停止");si->pushButton->setDisabled(true);si->pushButton_2->setDisabled(true);}else if (text == "停止") {QString sets = "stop_putton";//获取跳变速度QString a = si->comboBox_3->currentText();//发送信号到主界面emit setStr(a,sets,text);si->pushButton_3->setText("启动");si->pushButton->setDisabled(false);si->pushButton_2->setDisabled(false);}}void Form::on_pushButton_2_clicked()
{QString text = si->pushButton_2->text();//获取设置项QString sets = si->comboBox_2->currentText();//获取行数据QString a = si->comboBox->currentText();//发送信号到主界面emit setStr(sets,a,text);
}

3.3 线程逻辑文件:mythread.cpp;

#include "mythread.h"int timeset = 200;MyThread::MyThread(QObject *parent) :QThread(parent)
{stopped = false;
}void MyThread::run()
{stopped = false;int shuju = 1;while (!stopped) {QThread::msleep(timeset);  // 休眠时间设置;emit sendinfo(shuju);}
}void MyThread::stop()
{stopped = true;
}void MyThread::sleeptimeset(int value=200)
{timeset = value;
}

3.4 主界面监控及显示:main.cpp;

#include "mainwindow.h"
#include "form.h"
#include <QApplication>/* QApplication应用程序类管理图形用户界面应用程序的控制流和主要设置。是Qt生命,一个程序要确保一直运行,就肯定至少得有一个循环,这就是Qt主消息循环,在其中完成来自窗口系统和其它资源的所有事件消息处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication 对象,不论这个应用程序在同一时刻有多少个窗口。*///主界面监控int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;       //继承UIw.show();           //显示界面// 程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。return a.exec();
}

四、UI设计文件:

包括:主界面UI文件mainwindow.ui;控制窗口UI文件form.ui

4.1 控制窗口UI文件form.ui;

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>Form</class><widget class="QWidget" name="Form"><property name="geometry"><rect><x>0</x><y>0</y><width>392</width><height>214</height></rect></property><property name="windowTitle"><string>Form</string></property><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QGroupBox" name="groupBox"><property name="title"><string>控制窗口</string></property><layout class="QGridLayout" name="gridLayout_2"><item row="0" column="4"><widget class="QPushButton" name="pushButton"><property name="minimumSize"><size><width>0</width><height>25</height></size></property><property name="styleSheet"><string notr="true">QPushButton:hover
{
background-color: rgb(30, 144, 255);
}
QPushButton:pressed
{
background-color: #FFFF00; /*伪状态经过时背景色*/ 
border-style: inset;
}
QPushButton:!enabled{
background-color: rgb(100, 100, 100);
border-style: inset;
}
</string></property><property name="text"><string>增加</string></property></widget></item><item row="0" column="5"><widget class="QPushButton" name="pushButton_2"><property name="minimumSize"><size><width>0</width><height>25</height></size></property><property name="styleSheet"><string notr="true">QPushButton:hover
{
background-color: rgb(30, 144, 255);
}
QPushButton:pressed
{
background-color: #FFFF00; /*伪状态经过时背景色*/ 
border-style: inset;
}
QPushButton:!enabled{
background-color: rgb(100, 100, 100);
border-style: inset;
}
</string></property><property name="text"><string>删除</string></property></widget></item><item row="0" column="1"><widget class="QComboBox" name="comboBox_2"><property name="minimumSize"><size><width>0</width><height>25</height></size></property><property name="styleSheet"><string notr="true">background-color: #F5F5F5;
QComboBox QAbstractItemView::item{
height:36px;
color:#666666;
padding-left:9px;
background-color:#FFFFFF;
}
QComboBox QAbstractItemView::item:hover{ //悬浮
background-color:#409CE1;
color:#ffffff;
}
QComboBox QAbstractItemView::item:selected{//选中
background-color:#409CE1;
color:#ffffff;
}</string></property><item><property name="text"><string>列设置</string></property></item><item><property name="text"><string>行设置</string></property></item></widget></item><item row="0" column="3"><widget class="QComboBox" name="comboBox"><property name="minimumSize"><size><width>0</width><height>25</height></size></property><property name="styleSheet"><string notr="true">background-color: #F5F5F5;
QComboBox QAbstractItemView::item{
height:36px;
color:#666666;
padding-left:9px;
background-color:#FFFFFF;
}
QComboBox QAbstractItemView::item:hover{ //悬浮
background-color:#409CE1;
color:#ffffff;
}
QComboBox QAbstractItemView::item:selected{//选中
background-color:#409CE1;
color:#ffffff;
}</string></property><item><property name="text"><string>1</string></property></item><item><property name="text"><string>2</string></property></item><item><property name="text"><string>3</string></property></item></widget></item><item row="1" column="1"><widget class="QLabel" name="label"><property name="minimumSize"><size><width>0</width><height>25</height></size></property><property name="frameShape"><enum>QFrame::Panel</enum></property><property name="frameShadow"><enum>QFrame::Raised</enum></property><property name="text"><string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;跳变速度:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string></property></widget></item><item row="1" column="4"><widget class="QPushButton" name="pushButton_3"><property name="minimumSize"><size><width>0</width><height>25</height></size></property><property name="styleSheet"><string notr="true">QPushButton:hover
{
background-color: rgb(30, 144, 255);
}
QPushButton:pressed
{
background-color: #FFFF00; /*伪状态经过时背景色*/ 
border-style: inset;
}
QPushButton:!enabled{
background-color: rgb(100, 100, 100);
border-style: inset;
}
</string></property><property name="text"><string>启动</string></property></widget></item><item row="1" column="3"><widget class="QComboBox" name="comboBox_3"><property name="minimumSize"><size><width>0</width><height>25</height></size></property><property name="styleSheet"><string notr="true">background-color: #F5F5F5;
QComboBox QAbstractItemView::item{
height:36px;
color:#666666;
padding-left:9px;
background-color:#FFFFFF;
}
QComboBox QAbstractItemView::item:hover{ //悬浮
background-color:#409CE1;
color:#ffffff;
}
QComboBox QAbstractItemView::item:selected{//选中
background-color:#409CE1;
color:#ffffff;
}</string></property><item><property name="text"><string>0.2</string></property></item><item><property name="text"><string>0.5</string></property></item><item><property name="text"><string>1</string></property></item><item><property name="text"><string>2</string></property></item><item><property name="text"><string>3</string></property></item></widget></item></layout></widget></item></layout></widget><resources/><connections/>
</ui>

4.2 主界面UI文件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>768</width><height>468</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"><layout class="QGridLayout" name="gridLayout"><item row="0" column="0"><widget class="QTableWidget" name="tableWidget"><row><property name="text"><string>0</string></property></row><row><property name="text"><string>1</string></property></row><row><property name="text"><string>3</string></property></row><row><property name="text"><string>4</string></property></row><row><property name="text"><string>5</string></property></row><row><property name="text"><string>6</string></property></row><row><property name="text"><string>7</string></property></row><row><property name="text"><string>8</string></property></row><row><property name="text"><string>9</string></property></row><row><property name="text"><string>10</string></property></row><row><property name="text"><string>11</string></property></row><row><property name="text"><string>12</string></property></row><column><property name="text"><string>1</string></property></column><column><property name="text"><string>2</string></property></column><column><property name="text"><string>3</string></property></column><column><property name="text"><string>4</string></property></column><column><property name="text"><string>5</string></property></column><column><property name="text"><string>6</string></property></column><column><property name="text"><string>7</string></property></column><item row="0" column="0"><property name="text"><string/></property><property name="toolTip"><string extracomment="123"/></property></item></widget></item></layout></widget><widget class="QMenuBar" name="menubar"><property name="geometry"><rect><x>0</x><y>0</y><width>768</width><height>23</height></rect></property><widget class="QMenu" name="menu"><property name="title"><string>控制工具</string></property><addaction name="tool"/></widget><addaction name="menu"/></widget><widget class="QStatusBar" name="statusbar"/><action name="tool"><property name="text"><string>Start_tool</string></property></action></widget><resources/><connections/>
</ui>

五、qrc资源文件:

注明:qrc文件基本就是添加图片之类的资源文件,设置界面图标,背景图片之类的,此处不多赘述!

六、个人初步理解QT信号与槽函数的建立及通讯;

演示:

在这里插入图片描述

前提:可以建立信号和槽函数
1、在1号头文件中,先声明一个信号,在对应1号源文件中创建一个emit信号;
在这里插入图片描述

2、在2号头文件中,new一个指向1号源文件中类的指针,并创建连接信号与槽函数的关系;
3、槽函数在2号头文件中先声明,然后再在源文件中创建一个槽函数。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3031999.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【详细教程】基于pyEchart的封装(附代码)

目 录 一、项目结构 二、文件封装 2.1echart.py 2.2pyechartMock.py 三、结果 3.1柱状图 3.2折线图 3.3饼状图 最近在学习pyechart&#xff0c;老师要我们画几个简单的图&#xff0c;比如折线图&#xff0c;柱状图&#xff0c;饼状图&#xff0c;我这里在参考pyechart…

答辩PPT设计无从下手?哪些AI工具可以提供帮助

本科毕业论文答辩PPT该怎么做&#xff1f; 在我原本的认知里面&#xff0c;答辩PPT是要包含论文各个章节的&#xff0c;在答辩时需要方方面面都讲到的&#xff0c;什么摘要、文献综述、实证分析、研究结果样样不落。但是&#xff0c;这大错特错&#xff01; 答辩PPT环节时长…

luceda ipkiss教程 70:合并GDS版图

通过代码拼版&#xff1a; 所有代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3class Design1(i3.GDSCell):def _default_filename(self):return "Ring_Test.gds"def _default_name(self):return "Design1"class Des…

大数据基础工程技术团队4篇论文入选ICLR,ICDE,WWW

近日&#xff0c;由阿里云计算平台大数据基础工程技术团队主导的四篇时间序列相关论文分别被国际顶会ICLR2024、ICDE2024和WWW2024接收。 论文成果是阿里云与华东师范大学、浙江大学、南京大学等高校共同研发&#xff0c;涉及时间序列与智能运维结合的多个应用场景。包括基于P…

recycleview和banner新闻列表轮播图

说明&#xff1a;最近碰到一个需求&#xff0c;弄一个新闻列表和轮播图&#xff0c;在首页显示&#xff0c;并且需要json解析&#xff0c;图片下载&#xff0c;轮播图和新闻列表一起滑动 ui效果图&#xff1a; 文件说明&#xff1a; step1:引用依赖包 图片下载 json解析 轮播…

Java入门基础学习笔记4——开发Helloworld入门程序

Java程序开发的三个步骤&#xff1a; 1&#xff09;编写代码 2&#xff09;编译代码 3&#xff09;运行代码 注意事项&#xff1a; 第一个java程序建议使用记事本来编写。 建议代码文件名全英文、首字母大写、满足驼峰模式&#xff0c;源代码文件的后缀必须是.java 注意&a…

企业破产重整:从“至暗时刻”到“涅槃重生”

今天我们不谈星辰大海&#xff0c;而是要潜入商业世界的深海区&#xff0c;探索那些濒临绝境的企业是如何借助“破产重整”的神秘力量&#xff0c;实现惊天大逆转的&#xff01; 一、破产重整&#xff0c;到底是个啥&#xff1f; 想象一下&#xff0c;企业像是一位远航的船长…

数据增强,迁移学习,Resnet分类实战

目录 1. 数据增强&#xff08;Data Augmentation&#xff09; 2. 迁移学习 3. 模型保存 4. 102种类花分类实战 1. 数据集 2.导入包 3. 数据读取与预处理操作 4. Datasets制作输入数据 5.将标签的名字读出 6.展示原始数据 7.加载models中提供的模型 8.初始化…

从静态PPT到智能演讲——人工智能在演示文稿中的应用

1.概述 在这个信息过载的时代&#xff0c;能够吸引并持续吸引观众的注意力无疑成为了一项艰巨的任务。公众演讲领域正经历着一场由人工智能&#xff08;AI&#xff09;引领的革命。AI不仅在制作引人入胜的内容方面发挥作用&#xff0c;而且在分析演讲的传递方式上也起着关键作…

【C++】 类的6个默认成员函数

目录 1. 类的6个默认成员函数 一.构造函数 1.基本概念 2 特性 注意&#xff1a;C11 中针对内置类型成员不初始化的缺陷&#xff0c;又打了补丁&#xff0c; 3.构造函数详解 3.1构造函数体赋值 3.2 初始化列表 3.3 explicit关键字 二.析构函数 1 概念 2 特性 两个栈实…

Vue路由拆分

1.在src下建立router&#xff0c;在router中建立文件index 2.将main.js中部分内容复制 App <template> <div><a href"#/friend">朋友</a><br><a href"#/info">信息</a><br><a href"#/music&quo…

Photoshop中图层的应用

Photoshop中图层的应用 前言Photoshop中的图层面板Photoshop中图层的基本操作新建图层复制/剪切图层链接图层修改图层名称及颜色背景图层与普通图层栅格化图层图层的对齐与分布图层的合并 前言 图层在Photoshop中就像一层一层的透明纸&#xff0c;可以透过图层的透明区域看到下…

动手学深度学习16 Pytorch神经网络基础

动手学深度学习16 Pytorch神经网络基础 1. 模型构造2. 参数管理1. state_dict()2. normal_() zeros_()3. xavier初始化共享参数的好处 3. 自定义层4. 读写文件net.eval() 评估模式 QA 1. 模型构造 定义隐藏层–模型结构定义前向函数–模型结构的调用 import torch from torch…

万村乐数字乡村综合服务系统如何助力农民收入的腾飞

作为行业领先的数字乡村综合服务系统——“万村乐”&#xff0c;其核心便是基于互联网乡村和物联网乡村的强大信息基石之上。通过幸福民生服务、高效政务服务以及规范的党务服务这三条主线&#xff0c;以手机端平台为承载&#xff0c;借助事件反馈、精准种养数据、精细人员网格…

【Java】/*方法的使用-快速总结*/

目录 一、什么是方法 二、方法的定义 三、实参和形参的关系 四、方法重载 五、方法签名 一、什么是方法 Java中的方法可以理解为C语言中的函数&#xff0c;只是换了个名称而已。 二、方法的定义 1. 语法格式&#xff1a; public static 返回类型 方法名 (形参列表) { //方…

AI领域最伟大的论文检索网站

&#x1f4d1; 苏剑林&#xff08;Jianlin Su&#xff09;开发的“Cool Papers”网站旨在通过沉浸式体验提升科研工作者浏览论文的效率和乐趣。这个平台的核心优势在于利用Kimi的智能回答功能&#xff0c;帮助用户快速了解论文的常见问题&#xff08;FAQ&#xff09;&#xff0…

定了,2024年天门中级职称报名开始了

关于今年天门中级职称报名各类相关事宜&#xff0c;我们一起来看看 一、报名时间和地址 1.报名时间&#xff1a;2024年5月10日至5月22日&#xff0c;并由主管部门或用人单位将报名表提交给人力资源部&#xff08;注意不要错过时间了&#xff09; 水测准考证领取时间为正式考试…

卷积模型的剪枝、蒸馏---蒸馏篇--NST特征蒸馏(以deeplabv3+为例)

本文使用NST特征蒸馏实现deeplabv3+模型对剪枝后模型的蒸馏过程; 一、NST特征蒸馏简介 下面是两张叠加了热力图(heat map)的图片,从图中很容易看出这两个神经元具有很强的选择性:左图的神经元对猴子的脸部非常敏感,右侧的神经元对字符非常敏感。这种激活实际上意味着神经…

自回归模型的优缺点及改进方向

在学术界和人工智能产业中&#xff0c;关于自回归模型的演进与应用一直是一个引发深入讨论和多方观点交锋的热门议题。尤其是Yann LeCun&#xff0c;这位享誉全球的AI领域学者、图灵奖的获得者&#xff0c;以及被誉为人工智能领域的三大巨擘之一&#xff0c;他对于自回归模型持…

笔记2:torch搭建VGG网络代码详细解释

VGG网络结构 VGG网络&#xff08;Visual Geometry Group Network&#xff09;是一种经典的深度学习卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;由牛津大学的视觉几何组&#xff08;Visual Geometry Group&#xff09;在2014年提出。VGG网络在ImageNet挑战赛2014…