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

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


文章目录


前言

学习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;

cpp 复制代码
//这段代码的作用是防止头文件的重复包含,确保在编译过程中每个源文件只包含一次该头文件。
#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;

cpp 复制代码
#ifndef FORM_H
#define FORM_H

#include <QWidget>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT

public:
    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;

cpp 复制代码
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>

class MyThread : public QThread
{
    Q_OBJECT

public:
    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;

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;

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;

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;

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;       //继承UI
    w.show();           //显示界面
    // 程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
    return a.exec();
}

四、UI设计文件:

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

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

xml 复制代码
<?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 复制代码
<?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号头文件中先声明,然后再在源文件中创建一个槽函数。

相关推荐
守护者17019 分钟前
JAVA学习-练习试用Java实现“使用Arrays.toString方法将数组转换为字符串并打印出来”
java·学习
源码哥_博纳软云21 分钟前
JAVA同城服务场馆门店预约系统支持H5小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
学会沉淀。28 分钟前
Docker学习
java·开发语言·学习
Rinai_R43 分钟前
计算机组成原理的学习笔记(7)-- 存储器·其二 容量扩展/多模块存储系统/外存/Cache/虚拟存储器
笔记·物联网·学习
吃着火锅x唱着歌43 分钟前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
ragnwang1 小时前
C++ Eigen常见的高级用法 [学习笔记]
c++·笔记·学习
西猫雷婶1 小时前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv
kiiila1 小时前
【Qt】对象树(生命周期管理)和字符集(cout打印乱码问题)
开发语言·qt
小_太_阳1 小时前
Scala_【2】变量和数据类型
开发语言·后端·scala·intellij-idea
直裾1 小时前
scala借阅图书保存记录(三)
开发语言·后端·scala