• 5860阅读
  • 2回复

一段代码 小第是刚学QT [复制链接]

上一主题 下一主题
离线qinyi
 
只看楼主 倒序阅读 楼主  发表于: 2008-03-27
— 本帖被 XChinux 执行加亮操作(2008-03-29) —
#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);
      
}
为什么数据既不能添加也不能删除呢?
C++  QT
嵌入式BBS论坛
http://bbs.2embed.com
离线wangbenqq

只看该作者 1楼 发表于: 2008-03-28
这么长的代码都贴出来!牛!看了就晕!
离线zncggaofei
只看该作者 2楼 发表于: 2008-03-28
参数数目不匹配 , 仔细检查程序
There is someone that is coming or passing away in your life around the clock, so you may lose sight of those seen, and forget those remembered. There is gain and loss in your life, so you may catch sight of those unseen, and remember those forgotten. Nevertheless, doesn’t the unseen exist for sure? Will the remembered remain forever?
快速回复
限100 字节
 
上一个 下一个