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

news2024/11/17 11:23:37

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_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;

#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;

#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;       //继承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 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://www.coloradmin.cn/o/1676278.html

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

相关文章

USB3.0接口——(3)协议层(包格式)

1.协议层 1.1.超高速传输事务 超高速事务&#xff08;SuperSpeed transactions&#xff09;由主机对设备端点请求或发送数据开始&#xff0c;并在端点发送数据或确认收到数据时完成。 超高速总线上的数据传输&#xff08;transfer&#xff09;是主机请求设备应用程序生成的数…

76岁林子祥升级做爷爷,亲自为孙女取名

林子祥与前妻吴正元的儿子&#xff0c;现年39岁的林德信入行以来绯闻不少&#xff0c;自与圈外女友Candace拍拖后便修心养性&#xff0c;去年他已经低调与拍拖5年多Candace完婚&#xff0c;正式步入人生另一阶段。 昨日&#xff08;5月12日&#xff09;林德信借母亲节这个温馨日…

如何在控制台应用程序里面托管ASP.NET Core网站

目录 介绍运行效果开发环境项目结构第三方库引用编写代码介绍 本文如何不通过IIS,使用控制台程序作为宿主主机来运行我们的asp.net core开发的网站程序。通过改案例你也可以后期通过winform或者wpf作为宿主来运行我们的asp.net core开发的网站。 运行效果 开发环境 vs2022+.…

2024年5月面试准备

2024年5月面试准备 资料来源Java基础泛型注解异常反射SPI机制Java集合CollectionMap 并发基础线程并发关键字并发集合Lock核心类并发集合核心类原子类核心类线程池核心类ScheduledThreadPoolExecutorForkJoinPoolFokJoinTask JUC原子类: CAS, Unsafe和原子类详解JUC 工具类 Jav…

【打字】打字训练之针对性键盘区域练习

本文章的核心点是&#xff1a;使用代码生成自己想要训练的键位的词汇&#xff0c;然后导入到打字软件针对性练习 一个程序员突然想纠正打字习惯源于腱鞘炎&#xff0c;虽然使用双拼打字已经不慢了&#xff0c;但是姿势不是很正确&#xff0c;导致了腱鞘炎。 所以想着好好纠正指…

odoo16 银行对账单导入改造

解决问题: odoo原生功能的话 是不能在系统上临时处理文件内容的&#xff0c;只会提示文件内容格式不对。 原始文件格式 在头部与尾部 格式问题&#xff0c;例如csv文件和 C53 文件&#xff0c;做一个前置弹框处理数据之后再导入 camt效果: csv效果:

bugfix:遇见“隐形字符”:ⅰ与i的编码迷局

前言 在软件开发的世界里&#xff0c;遇到各种奇奇怪怪的bug是在所难免的。今天&#xff0c;我就遭遇了一个看似简单实则棘手的问题——用户反馈账号无法登录&#xff0c;系统一直提示“账号不存在”。一番抽丝剥茧后&#xff0c;我发现问题竟然出在一个不起眼的字符上&#x…

xFormers

文章目录 一、关于 xFormers二、安装 xFormers三、基准测试&#xff08;可选&#xff09;测试安装 四、使用 xFormers1、Transformers 关键概念2、Repo 地图注意力机制Feed forward mechanismsPositional embeddingResidual pathsInitializations 3、主要特征4、安装故障排除 一…

小红书自动私信获客,打造个人品牌

在当今这个内容为王、社交至上的时代&#xff0c;小红书作为新兴的社交电商平台&#xff0c;凭借其独特的社区氛围和强大的种草能力&#xff0c;成为了众多KOL、商家以及个人品牌打造的首选平台。想要在小红书上脱颖而出&#xff0c;精准引流获客&#xff0c;利用自动私信功能不…

Ajax额

原生Ajax xml 已被json取代 http 请求方法urlhttp版本号 network 谷歌浏览器查看请求报文和响应报文 F12 network header里面有 请求头 响应头 点击view source 可以查看请求响应行 请求体在请求行头下面 get请求有url参数&#xff0c;请求体变为query String…

汇昌联信科技:拼多多电商的运营流程有哪些?

在当今互联网高速发展的时代&#xff0c;电商平台层出不穷&#xff0c;其中拼多多以其独特的团购模式和低价策略迅速崛起&#xff0c;成为众多消费者和商家的新宠。那么&#xff0c;拼多多电商的运营流程究竟包含哪些环节呢?接下来&#xff0c;我们将从商品上架、营销推广、订…

基于PySpark进行去哪儿网数据分析

基于PySpark进行去哪儿网数据分析 本文介绍了如何使用PySpark对去哪儿网的数据进行分析&#xff0c;从而洞察用户偏好、热门目的地以及销售趋势。 1.数据加载 我们需要确保已经准备好了PySpark的开发环境&#xff0c;并且准备好了去哪儿网的数据集。可以通过创建SparkSessio…

vue cmd执行报错 ‘vue‘ 不是内部或外部命令

使用vue脚手架快速搭建项目&#xff0c;在cmd中执行&#xff1a;vue init webpack vue-demo&#xff0c;报错&#xff1a; vue 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方法&#xff0c;执行如下的命令 npm config list 注意&#xff1a;找到prefix等号后…

在Ubuntu命令行中一行代码配置C++的OpenCV库

本文介绍在Linux操作系统的Ubuntu版本中&#xff0c;配置C 语言环境下的计算机视觉库OpenCV的方法。 首先&#xff0c;为了保证我们可以在Ubuntu中正确配置OpenCV库&#xff0c;需要使得计算机内具有C 开发环境。其中&#xff0c;在Ubuntu中&#xff0c;我们可以基于命令行方便…

第16节 实战:文件转shellcode

我最近做了一个关于shellcode入门和开发的专题课&#x1f469;&#x1f3fb;‍&#x1f4bb;&#xff0c;主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料&#xff0c;内容里面的每一个环境我都亲自测试实操过的记录&#xff0c;有需要的小伙伴可以参考…

在微信小程序项目中安装和使用 Vant 组件库

vant Wwapp 小程序开发组件库官网 Vant Weapp - 轻量、可靠的小程序 UI 组件库 安装 Vant 组件库 1.在微信小程序项目文件目录的空白位置右键&#xff0c;选择在外部终端窗口中打开 2在命令行输入如下命令&#xff08;在项目中创建包管理配置文件 package.json&#xff09; …

PHP 自提时间

前端: 后台设置: 代码: public function getBusinessHour(){// 需求单门店$data (new StoreModel())->limit(1)->select()->toArray();$days explode(,, $data[0][shop_hours]);$businessHours $days[1];// 使用 explode 分割字符串&#xff0c;获取开始和结束时…

局域网监控软件有哪些:好用的局域网桌面监控软件神器分享

如何有效地监控和管理内部员工的计算机使用行为&#xff0c;防范潜在的安全风险&#xff0c;提高工作效率&#xff0c;是众多企业管理者关注的焦点。 而一款优秀的局域网桌面监控软件无疑能为企业的IT治理提供有力支撑。 小编在此给大家推荐一款好用的局域网桌面监控软件——域…

地平线X3开发板配置wifi调试

1. 系统镜像制作 系统镜像的制作依赖bsp与补丁包&#xff0c;bsp在天工开物全量包中&#xff1a;https://developer.horizon.ai/resource 补丁下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1YKcOWL0EpboGq-SnqwIGeQ 提取码&#xff1a;b6lf 补丁包中有详细…

TSINGSEE青犀智慧校园视频综合管理系统建设方案及平台功能

一、方案背景 智慧校园视频综合管理系统以物联网、云计算、大数据分析等新技术为核心&#xff0c;将基于计算机网络的信息服务融入学校的各个应用与服务领域&#xff0c;实现互联和协作。通过“云边缘计算”构架&#xff0c;在各应用子系统的基础数据层面上&#xff0c;打通上…