头文件中:
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);
}