208_QT_槽函数设置成静态,在静态槽函数中调用自身UI控件,以及在静态槽函数中发送信号

65 篇文章 6 订阅
这篇博客介绍了如何在C++中通过添加静态类指针实现跨文件调用成员函数。作者详细展示了在头文件和cpp文件中如何定义和初始化这个静态指针,并且给出了一个使用该指针在UI界面中查找表格文本的示例。通过这个静态指针,可以方便地在不同文件间访问和操作myMainWindow类的对象。
摘要由CSDN通过智能技术生成

头文件中:

public:
myMainWindow * self(){return m_self;}/*返回自身的类指针*/


private slots:
static void find_table_text();//查找指定位置本文

signals:
    //信号
    void emit_find_table_text(int seed, QString time_text);//发送【查找】信号
    
private:
    Ui::myMainWindow *ui;
    static myMainWindow* m_self;/*添加个静态类指针,方便其他文件加上该头文件后,可以调用这里的成员函数*/

.cpp文件中

/*
 * 12.30
 *  添加m_self静态类指针,方便其他文件加上该头文件后,可以调用这里的成员函数
 *  self()返回自身的类指针
*/
myMainWindow* myMainWindow::m_self = nullptr;

myMainWindow::myMainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::myMainWindow),tedit(NULL),m_contNum(0)
{
    ui->setupUi(this);
    m_self = this;
    .
    .
    .
    .
    /*省略中间大多数和这里不相干的*/
}

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

/*静态槽函数,m_self调用UI、发送信号*/
void myMainWindow::find_table_text()
{
    //优先判断初始表格行是否为空
    if( m_self->ui->tableWidget->item(0, 0) != 0 && m_self->ui->tableWidget->item(0, 1) != 0 && m_self->ui->tableWidget->item(0, 2) != 0)
    {
        int j = 0;
        //清空查找框中的所有文本
        m_self->ui->textEdit->clear();
        //获取当前总行数
        int rowIndex = m_self->ui->tableWidget->rowCount();
        qDebug() << "rowIndex = " << rowIndex <<endl;


        //获取学号栏文本
        QString text01 = m_self->ui->lineEdit_3->text();
        //然后返回字符串地址,方便与表格中的文本地址【strcmp】
        char *t1 = (char *)text01.toStdString().c_str();
        qDebug() << text01 <<endl;

        QString text02 = m_self->ui->lineEdit_4->text();
        char *t2 = (char *)text02.toStdString().c_str();

        QString text03 = m_self->ui->lineEdit_5->text();
        char *t3 = (char *)text03.toStdString().c_str();

    //初始行号设置为1,放置查询时检索未输入数据的表格,会导致数组越界,程序崩溃
    //i <= rowIndex是因为刚开始行号为1,<不会进入循环
        for(int i = 1; i <= rowIndex; i++)
        {
            char str[1024] = "";

            //列不变,行变,1、2、3列写死
            QString rowdata_01 = m_self->ui->tableWidget->item(i - 1, 0)->text();
            char * rowda_01 = (char *)rowdata_01.toStdString().c_str();

            QString rowdata_02 = m_self->ui->tableWidget->item(i - 1, 1)->text();
            char * rowda_02 = (char *)rowdata_02.toStdString().c_str();

            QString rowdata_03 = m_self->ui->tableWidget->item(i - 1, 2)->text();
            char * rowda_03 = (char *)rowdata_03.toStdString().c_str();

            //只要有一个相同,就全部输出
            if( (0 == strcmp(rowda_01, t1)) || (0 == strcmp(rowda_02, t2)) || (0 == strcmp(rowda_03, t3)))
            {
                sprintf(str, "%s %s %s", rowda_01, rowda_02, rowda_03);
                m_self->ui->textEdit->append(str);
                j++;
            }
        }
        if(0 == j)
        {
            m_self->ui->textEdit->setText("未找到该学生讯息");
        }
    }
    else
    {
        QMessageBox * pfind = new QMessageBox(QMessageBox::Warning, "提示框", "表格内容为空,请输入",\
                                              QMessageBox::Ok);

        pfind->exec();
    }


    emit m_self->emit_find_table_text(TRAM_Find_Table_Text, NULL);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扳手的海角

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值