• 4828阅读
  • 4回复

[提问]想做一个用于数据库的通用删除按钮,请各位帮忙看看! [复制链接]

上一主题 下一主题
离线alexltr
 

只看楼主 倒序阅读 楼主  发表于: 2012-09-12
我想可能是一些指针,传址等问题C++基础不行,请大家帮忙看看,谢谢!


.h
  1. #ifndef DELETERECORDBUTTON_H
  2. #define DELETERECORDBUTTON_H
  3. #include <QtGui>
  4. #include <QtSql>
  5. #include <QDebug>
  6. class DeleteRecordButton : public QPushButton
  7. {
  8.     Q_OBJECT
  9. public:
  10.     explicit DeleteRecordButton(QTableView *tableView, QSqlTableModel *tableModel, QWidget *parent = 0);
  11.     
  12. signals:
  13.     
  14. private slots:
  15.     void deleteRecord();
  16. private:
  17.      QTableView *mTableView;
  18.      QSqlTableModel *mTableModel;
  19. };
  20. #endif // DELETERECORDBUTTON_H


.cpp
  1. #include "deleterecordbutton.h"
  2. DeleteRecordButton::DeleteRecordButton(QTableView *tableView, QSqlTableModel *tableModel, QWidget *parent) :
  3.     QPushButton(parent), mTableView(tableView), mTableModel(tableModel)
  4. {
  5.     setText(tr("Delete Record"));
  6.     connect(this,SIGNAL(clicked()),this,SLOT(deleteRecord()));
  7. }
  8. void DeleteRecordButton::deleteRecord()
  9. {
  10.     QModelIndex index = mTableView->currentIndex();
  11.     if (!index.isValid())
  12.         return;
  13.     if (QMessageBox::question(this,tr("Confirm Delete"),
  14.                               tr("Are you sue to delete current record?"),
  15.                               QMessageBox::Yes,QMessageBox::No) == QMessageBox::Yes){
  16.         qDebug()<<index.row();
  17.         mTableModel->removeRow(index.row(),index.parent()); ///编译通过,但执行到这句就程序崩溃了。
  18.         mTableModel->submit();
  19.     }
  20. }



错误信息

[font='Courier']16
[font='Courier']Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly
[font='Courier']程序异常终止。



我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线sbtree
只看该作者 1楼 发表于: 2012-09-13
问题在于你用View的Index作为参数去删除Model中的行,索引的管理在View中和在Model中各自独立,他们之间要做一个转化后,匹配起来才行
windows 7 + VC++2008 + Qt4.5.2
离线scphb13

只看该作者 2楼 发表于: 2012-09-13
先检查你的mTableModel里面的index.row()这一行有没有index.parent()这个东西,如果没有的话,你remove肯定要中断。只要没语法上错误,编译器不会报错。
SmallBin
离线alexltr

只看该作者 3楼 发表于: 2012-09-13
谢谢楼上两位的关注,我再试试看。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 4楼 发表于: 2012-09-13
上面的程序没有问题。是我在后面实例化这个类时,还没有定义model. Sorry!

btnDelete = new DeleteRecordButton(tbvCountryCode,mdlCountryCode,this);
这句应该放在tbvCountryCode和mdlCountryCode之后。

不过如果是使用QSortFilterProxyModel,确实要考虑2楼朋友所讲的问题。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
快速回复
限100 字节
 
上一个 下一个