#include "callboard.h"
#include "../connection.h"
#include <QtSql>
#include <QtGui>
int uniqueCallBoardId;
CallBoard::CallBoard(QWidget *parent) : QWidget(parent)
{
Connection();
setupCallBoard();
setupAction();
setupToolBar();
TitleLabel = new QLabel(tr("标题:"));
HeftLabel = new QLabel(tr("重要性:"));
ArriveLabel = new QLabel(tr("通知部门:"));
OverdueDateTimeLabel = new QLabel(tr("有效日期:"));
Title = new QLineEdit;
//重要性
Heft = new QComboBox;
Heft->addItem(tr("一般"));
Heft->addItem(tr("重要"));
Heft->addItem(tr("紧急"));
//通知部门
Arrive = new QComboBox;
Arrive->addItem(tr("教务处"));
Arrive->addItem(tr("实验室"));
Arrive->addItem(tr("领导"));
Arrive->addItem(tr("公告"));
//通知有效日期
OverdueDateTime = new QDateTimeEdit;
OverdueDateTime->setMinimumDate(QDate::currentDate().addDays(-365));
MainText = new QTextEdit;
ShowHide = new QPushButton(tr("隐藏"));
ShowHide->setCheckable(true);
DelCallButton = new QPushButton(tr("删除"));
DelCallButton->setEnabled(false);
SelectCallButton = new QPushButton(tr("查询"));
NewCallButton = new QPushButton(tr("新建"));
EditCallButton = new QPushButton(tr("编辑"));
OkButton = new QPushButton(tr("保存"));
groupBox = new QGroupBox(tr("新建 编辑"),this);
CallBoardLayout = new QGridLayout;
CallBoardLayout->addWidget(TitleLabel, 1, 0);
CallBoardLayout->addWidget(Title, 1, 1);
CallBoardLayout->addWidget(HeftLabel, 1, 2);
CallBoardLayout->addWidget(Heft,1, 3);
CallBoardLayout->addWidget(ArriveLabel, 2, 0);
CallBoardLayout->addWidget(Arrive, 2, 1);
CallBoardLayout->addWidget(OverdueDateTimeLabel, 2, 2);
CallBoardLayout->addWidget(OverdueDateTime, 2, 3);
CallBoardLayout->addWidget(MainText, 3, 0, 1, 5);
CallBoardLayout->setContentsMargins(0, 0, 0, 0);
groupBox->setLayout(CallBoardLayout);
ButtonLayout = new QHBoxLayout;
ButtonLayout->addWidget(ShowHide);
ButtonLayout->addStretch();
ButtonLayout->addWidget(DelCallButton);
ButtonLayout->addWidget(SelectCallButton);
ButtonLayout->addStretch();
ButtonLayout->addWidget(NewCallButton);
ButtonLayout->addWidget(EditCallButton);
ButtonLayout->addWidget(OkButton);
CallBoardMainLayout = new QVBoxLayout;
CallBoardMainLayout->addWidget(view);
CallBoardMainLayout->addWidget(groupBox);
CallBoardMainLayout->addLayout(ButtonLayout);
CallBoardMainLayout->setContentsMargins(0, 0, 0, 0);
setLayout(CallBoardMainLayout);
setWindowTitle(tr("通知和公告板"));
connect(ShowHide, SIGNAL(toggled(bool)), groupBox, SLOT(setVisible(bool)));
connect(OkButton, SIGNAL(clicked()), this, SLOT(InsertDate()));
connect(DelCallButton, SIGNAL(clicked()), this, SLOT(on_pushButtonDelete_clicked()));
connect(EditCallButton, SIGNAL(clicked()), this, SLOT(on_pushButtonEdit_clicked()));
connect(NewCallButton, SIGNAL(clicked()), this, SLOT(NewBuild()));
}
void CallBoard::setupCallBoard()
{
InModel = new QSqlRelationalTableModel(this);
InModel->setTable("callboard");
// InModel->setFilter("ID >=2 ");
InModel->setEditStrategy(QSqlTableModel::OnRowChange);
// InModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
InModel->select();
InModel->removeColumn(0);
InModel->setHeaderData(0, Qt::Horizontal, QObject::tr("重要性"));
InModel->setHeaderData(1, Qt::Horizontal, QObject::tr("发布人"));
InModel->setHeaderData(2, Qt::Horizontal, QObject::tr("标题"));
InModel->setHeaderData(3, Qt::Horizontal, QObject::tr("正文"));
InModel->setHeaderData(4, Qt::Horizontal, QObject::tr("发布日期"));
InModel->setHeaderData(5, Qt::Horizontal, QObject::tr("到期时间"));
InModel->removeColumn(6);
/*
connect(Model, SIGNAL(rowsInserted(QModelIndex, int, int)),
this, SLOT(updateHeader(QModelIndex, int, int)));
connect(Model, SIGNAL(rowsRemoved(QModelIndex, int, int)),
this, SLOT(updateHeader(QModelIndex, int, int)));
*/
view = new QTableView;
view->setEditTriggers(QAbstractItemView::NoEditTriggers);
view->setSortingEnabled(true);
view->setSelectionBehavior(QAbstractItemView::SelectRows);
view->setSelectionMode(QAbstractItemView::SingleSelection);
// view->setShowGrid(false);
// view->verticalHeader()->hide();
view->setAlternatingRowColors(true);
view->setModel(InModel);
connect(view, SIGNAL(clicked(QModelIndex)),
this, SLOT(on_tableView_clicked(QModelIndex)));
}
void CallBoard::setupAction()
{
// QAction *actionAdd = new QAction(QIcon(rsrcPath + "/filenew.png"), tr("新建(&N)"), this);
// actionAdd->setShortcut(Qt::CTRL + Qt::Key_N);
}
void CallBoard::setupToolBar()
{
}
void CallBoard::NewBuild()
{
Title->setEnabled(true);
Heft->setEnabled(true);
Arrive->setEnabled(true);
OverdueDateTime->setEnabled(true);
MainText->setEnabled(true);
DelCallButton->setEnabled(false);
Title->clear();
MainText->clear();
OverdueDateTime->setMinimumDate(QDate::currentDate().addDays(-365));
}
int CallBoard::InsertDate()
{
QSqlRecord record;
int id = generateCallBoardId();
DelCallButton->setEnabled(false);
QString insertTitle = Title->text();
QString insertHeft = Heft->currentText();
QString insertArrive = Arrive->currentText();
QDateTime insertOverdueDateTime = OverdueDateTime->dateTime();
QDateTime *dateTime;
QDateTime currentTime = dateTime->currentDateTime();
QString insertMainText = MainText->toPlainText();
if(insertTitle.isEmpty()||insertMainText.isEmpty())
{
QString message(tr("标题和正文不能为空!"));
QMessageBox::information(this, tr("提示"), message);
}else{
QSqlField f1("ID", QVariant::Int);
QSqlField f2("Heft", QVariant::String);
QSqlField f3("Owner", QVariant::String);
QSqlField f4("Title", QVariant::String);
QSqlField f5("Text", QVariant::String);
QSqlField f6("Date", QVariant::DateTime);
QSqlField f7("Overdue", QVariant::DateTime);
QSqlField f8("Arrive", QVariant::String);
f1.setValue(QVariant(id));
f2.setValue(QVariant(insertHeft));
f3.setValue(QVariant(insertArrive));
f4.setValue(QVariant(insertTitle));
f5.setValue(QVariant(insertMainText));
f6.setValue(QVariant(currentTime));
f7.setValue(QVariant(insertOverdueDateTime));
f8.setValue(QVariant(insertArrive));
record.append(f1);
record.append(f2);
record.append(f3);
record.append(f4);
record.append(f5);
record.append(f6);
record.append(f7);
record.append(f8);
if(InModel->insertRecord(1, record))
{
QString message(tr("插入数据成功!"));
QMessageBox::information(this, tr("提示"), message);
}
}
/*
QSqlTableModel modelInsert;
modelInsert.setTable("callboard");
int row = 0;
modelInsert.insertRows(row, 1);
modelInsert.setData(modelInsert.index(row, 0), "NULL");
modelInsert.setData(modelInsert.index(row, 1), "一般");
modelInsert.setData(modelInsert.index(row, 2), "aa");
modelInsert.setData(modelInsert.index(row, 3), "008");
modelInsert.setData(modelInsert.index(row, 4), "007");
modelInsert.setData(modelInsert.index(row, 5), "2008-03-19 17:19:56");
modelInsert.setData(modelInsert.index(row, 6), "2008-03-21 17:19:59");
modelInsert.setData(modelInsert.index(row, 7), "007");
modelInsert.submitAll();
*/
return id;
}
int CallBoard::generateCallBoardId()
{
uniqueCallBoardId += 1;
return uniqueCallBoardId;
}
void CallBoard::on_pushButtonDelete_clicked()
{
// QSqlRelationalTableModel *delModel = new QSqlRelationalTableModel(this);
// delModel->setTable("callboard");
QModelIndex Delindex = view->currentIndex();
if (Delindex.isValid())
{
if (QMessageBox::Ok == QMessageBox::question(this, tr("提示信息"), tr("确定要删除第 ") + QString::number(Delindex.row()+1) + tr(" 行纪录?"), tr("确定"), tr("取消")) == 0)
{
if(InModel->removeRow(Delindex.row())){
InModel->submitAll();
}else{
QMessageBox::critical(this, tr("提示信息"), tr("错误信息:") + InModel->lastError().text(), tr("确定"), tr("取消"));
}
}
}
DelCallButton->setEnabled(false);
// int iRow = view->currentIndex().row();
// if (QMessageBox::question(this, tr("提示信息"), tr("确定要删除第 ") + QString::number(iRow+1) + tr(" 行纪录?"), tr("确定"), tr("取消")) == 0)
// {
// InModel->removeRows(iRow,1);
// InModel->submitAll();
// }
}
void CallBoard::on_pushButtonEdit_clicked()
{
Title->setEnabled(true);
Heft->setEnabled(true);
Arrive->setEnabled(true);
OverdueDateTime->setEnabled(true);
MainText->setEnabled(true);
}
void CallBoard::on_tableView_clicked(QModelIndex index)
{
QSqlRecord record = InModel->record(index.row());
QString title = record.value("Title").toString();
QString maintext = record.value("Text").toString();
Title->setText(tr("%1").arg(title));
Title->show();
Title->setEnabled(false);
DelCallButton->setEnabled(true);
Heft->setEnabled(false);
Arrive->setEnabled(false);
OverdueDateTime->setEnabled(false);
MainText->setPlainText(tr("%1").arg(maintext));
MainText->show();
MainText->setEnabled(false);
}
为什么数据既不能添加也不能删除呢?