• 5484阅读
  • 0回复

Qsqltablemodel 与 Qtableview 显示数据库崩溃 [复制链接]

上一主题 下一主题
离线smyrsmyr
 

只看楼主 倒序阅读 楼主  发表于: 2012-11-07
EmpInfoDialog::EmpInfoDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::EmpInfoDialog)
{
    ui->setupUi(this);
    InitInfoView();

    connect(ui->InfoView,SIGNAL(clicked(QModelIndex)),this,SLOT(SetInfoLabels(QModelIndex)));
    connect(ui->PartBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(RefreshInfoView(QString)));
   // connect(ui->SiteBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(RefreshInfoView(QString)));
   //2 connect(ui->PositionBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(RefreshInfoView(QString)));
}

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

void EmpInfoDialog::ClickAddButton()
{}

void EmpInfoDialog::ClickMoreButton()
{}

void EmpInfoDialog::InitInfoLabels()
{
    ui->EmpID->setText("工号:");
    ui->Name->setText("姓名:");
    ui->Part->setText("部门:");
    ui->Site->setText("地点:");
    ui->Sex->setText("性别:");
    ui->Position->setText("职务:");
    ui->Birthday->setText("生日:");
    ui->Email->setText("邮箱:");
    ui->Edu->setText("学历:");
    ui->HrLevel->setText("人事级别:");
    ui->JoinDay->setText("入职日期:");
    ui->Status->setText("状态:");
    ui->LeaveDay->setText("离职日期:");
    ui->Phone->setText("电话:");
    ui->Native->setText("籍贯:");
    ui->Address->setText("住址:");
    ui->ID->setText("身份证:");
    ui->CardNumber->setText("银行卡:");
    ui->Photo->setText("PHOTO");
}

void EmpInfoDialog::InitInfoView()
{
    QSqlTableModel *model=new QSqlTableModel();
    model->setTable("hr_empinfo");
    model->select();

    model->removeColumns(3,3);
    model->removeColumns(6,2);
    model->removeColumns(7,8);
    model->setHeaderData(0,Qt::Horizontal,"工号");
    model->setHeaderData(1,Qt::Horizontal,"姓名");
    model->setHeaderData(2,Qt::Horizontal,"性别");
    model->setHeaderData(3,Qt::Horizontal,"部门");
    model->setHeaderData(4,Qt::Horizontal,"地点");
    model->setHeaderData(5,Qt::Horizontal,"职务");
    model->setHeaderData(6,Qt::Horizontal,"状态");

    ui->InfoView->setModel(model);
    ui->InfoView->resizeColumnsToContents();
    ui->InfoView->show();

}

QString EmpInfoDialog::SetConditions()
{
    int i=0;
    QString conditions;
    conditions="";
    if(ui->PartBox->currentIndex()==0)
    {
        _partcondition="";
    }
    else
    {
        _partcondition=ui->PartBox->currentText();
        conditions="`part`=\""+_partcondition+"\"";
        i=1;
    }
    qDebug()<<conditions;
    if(ui->SiteBox->currentIndex()==0)
    {
        _sitecondition="";
    }
    else
    {
        _sitecondition=ui->SiteBox->currentText();
        if(i==1){conditions+=" AND `site`=\""+_sitecondition+"\"";}
        else{conditions="`part`=\""+_partcondition+"\"";i=1;}
    }
    qDebug()<<conditions;
    if(ui->PositionBox->currentIndex()==0)
    {
        _poscondition="";
    }
    else
    {
        _poscondition=ui->PositionBox->currentText();
        if(i==1){conditions+=" AND `position`=\""+_poscondition+"\"";}
        else{conditions="`position`=\""+_poscondition+"\"";}
    }
    qDebug()<<conditions;
    return conditions;

}

void EmpInfoDialog::SetInfoLabels(QModelIndex index)
{
    InitInfoLabels();
    if(index.column()==0)
    {
        //ui->EmpID->setText(ui->EmpID->text()+index.data().toString());//获取选中单元格数据
        QSqlQuery   query;
        QString     sqltmp;
        sqltmp="SELECT * FROM hr_empinfo WHERE `empid`=\""+index.data().toString()+"\"";
        query.exec(sqltmp);
        if(query.next())
        {
            ui->EmpID->setText("工号:"+query.value(0).toString());
            ui->Name->setText("姓名:"+query.value(1).toString());
            ui->Sex->setText("性别:"+query.value(2).toString());
            ui->Birthday->setText("生日:"+query.value(3).toString());
            ui->JoinDay->setText("入职日期:"+query.value(4).toString());
            ui->LeaveDay->setText("离职日期:"+query.value(5).toString());
            ui->Part->setText("部门:"+query.value(6).toString());
            ui->Site->setText("地点:"+query.value(7).toString());
            ui->Position->setText("职务:"+query.value(8).toString());
            ui->HrLevel->setText("人事级别:"+query.value(9).toString());
            ui->Edu->setText("学历:"+query.value(10).toString());
            ui->Status->setText("状态:"+query.value(11).toString());
            ui->Phone->setText("电话:"+query.value(12).toString());
            ui->Email->setText("邮箱:"+query.value(13).toString());
            ui->ID->setText("身份证:"+query.value(14).toString());
            ui->Address->setText("住址:"+query.value(15).toString());
            ui->Native->setText("籍贯:"+query.value(16).toString());
            ui->CardNumber->setText("银行卡:"+query.value(17).toString());
            QPixmap pixmap;
            pixmap.loadFromData(query.value(18).toByteArray());



            ui->Photo->setPixmap(pixmap.scaled(ui->Photo->width(),ui->Photo->height(),Qt::KeepAspectRatio));
            pixmap.scaledToWidth(100);


        }
    }
}

void EmpInfoDialog::RefreshInfoView(QString condition)
{
    model->setTable("hr_empinfo");
    model->setFilter(SetConditions());
    SetConditions();
    model->select();
    ui->InfoView->setModel(model);
    ui->InfoView->show();
}


我在UI界面做了三个QCombobox  想每次改变QCombobox的时候 就调用RefreshInfoView()来更新显示内容,但是现在一变程序就崩溃了
求高手指教

快速回复
限100 字节
 
上一个 下一个