├── doc ├── img1.png └── img2.png ├── email ├── icon.ico ├── img │ ├── login.png │ ├── passwd.png │ ├── unread.png │ ├── gray_star.png │ └── red_star.png ├── res │ ├── Logo.PNG │ ├── Logo2.PNG │ ├── add.png │ ├── bold.PNG │ ├── brush.png │ ├── color.PNG │ ├── copy.PNG │ ├── cut.PNG │ ├── exit.PNG │ ├── left.PNG │ ├── new.png │ ├── open.png │ ├── paste.PNG │ ├── redo.PNG │ ├── right.PNG │ ├── save.png │ ├── send.PNG │ ├── time.JPG │ ├── undo.PNG │ ├── bcolor.png │ ├── center.PNG │ ├── italic.PNG │ ├── justify.PNG │ ├── splash.gif │ ├── splash2.gif │ ├── zoomin.PNG │ ├── zoomout.PNG │ ├── fontsize.png │ ├── printImage.PNG │ ├── printText.PNG │ ├── rotate180.png │ ├── rotate270.png │ ├── rotate90.png │ ├── underline.PNG │ ├── mirrorVertical.png │ └── mirrorHorizontal.png ├── background │ ├── bg.jpg │ ├── bg_icon.jpg │ ├── bg_login.jpg │ ├── icon_1.jpg │ ├── icon_1_.jpg │ ├── icon_2.jpg │ ├── icon_2_.jpg │ ├── icon_3.jpg │ ├── icon_3_.jpg │ ├── icon_4.jpg │ ├── icon_4_.jpg │ ├── icon_5.jpg │ ├── icon_5_.jpg │ ├── icon_6.jpg │ ├── icon_6_.jpg │ ├── icon_7.jpg │ ├── icon_7_.jpg │ ├── icon_8.jpg │ ├── icon_8_.jpg │ ├── Homepage_1.png │ ├── Homepage_2.png │ ├── Homepage_3.png │ ├── Homepage_4.png │ ├── bg_login2.jpg │ ├── bg_login2_.jpg │ ├── bg_login3.jpg │ ├── bg_login3_.jpg │ ├── background1.jpg │ ├── bg_receiver.jpg │ └── bg_receivertoum.png ├── user.h ├── login.h ├── personinfo.h ├── receiver.h ├── buttondelegate.h ├── main.cpp ├── newuser.h ├── user.cpp ├── verificationcodelabel.h ├── receiver.cpp ├── personinfo.cpp ├── email.pro ├── res.qrc ├── verificationcodelabel.cpp ├── personinfo.ui ├── buttondelegate.cpp ├── login.cpp ├── mainwindow.h ├── newuser.cpp ├── receiver.ui ├── login.ui ├── newuser.ui ├── mainwindow.ui └── mainwindow.cpp └── README.md /doc/img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/doc/img1.png -------------------------------------------------------------------------------- /doc/img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/doc/img2.png -------------------------------------------------------------------------------- /email/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/icon.ico -------------------------------------------------------------------------------- /email/img/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/img/login.png -------------------------------------------------------------------------------- /email/res/Logo.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/Logo.PNG -------------------------------------------------------------------------------- /email/res/Logo2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/Logo2.PNG -------------------------------------------------------------------------------- /email/res/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/add.png -------------------------------------------------------------------------------- /email/res/bold.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/bold.PNG -------------------------------------------------------------------------------- /email/res/brush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/brush.png -------------------------------------------------------------------------------- /email/res/color.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/color.PNG -------------------------------------------------------------------------------- /email/res/copy.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/copy.PNG -------------------------------------------------------------------------------- /email/res/cut.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/cut.PNG -------------------------------------------------------------------------------- /email/res/exit.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/exit.PNG -------------------------------------------------------------------------------- /email/res/left.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/left.PNG -------------------------------------------------------------------------------- /email/res/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/new.png -------------------------------------------------------------------------------- /email/res/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/open.png -------------------------------------------------------------------------------- /email/res/paste.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/paste.PNG -------------------------------------------------------------------------------- /email/res/redo.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/redo.PNG -------------------------------------------------------------------------------- /email/res/right.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/right.PNG -------------------------------------------------------------------------------- /email/res/save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/save.png -------------------------------------------------------------------------------- /email/res/send.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/send.PNG -------------------------------------------------------------------------------- /email/res/time.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/time.JPG -------------------------------------------------------------------------------- /email/res/undo.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/undo.PNG -------------------------------------------------------------------------------- /email/img/passwd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/img/passwd.png -------------------------------------------------------------------------------- /email/img/unread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/img/unread.png -------------------------------------------------------------------------------- /email/res/bcolor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/bcolor.png -------------------------------------------------------------------------------- /email/res/center.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/center.PNG -------------------------------------------------------------------------------- /email/res/italic.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/italic.PNG -------------------------------------------------------------------------------- /email/res/justify.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/justify.PNG -------------------------------------------------------------------------------- /email/res/splash.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/splash.gif -------------------------------------------------------------------------------- /email/res/splash2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/splash2.gif -------------------------------------------------------------------------------- /email/res/zoomin.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/zoomin.PNG -------------------------------------------------------------------------------- /email/res/zoomout.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/zoomout.PNG -------------------------------------------------------------------------------- /email/background/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/bg.jpg -------------------------------------------------------------------------------- /email/img/gray_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/img/gray_star.png -------------------------------------------------------------------------------- /email/img/red_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/img/red_star.png -------------------------------------------------------------------------------- /email/res/fontsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/fontsize.png -------------------------------------------------------------------------------- /email/res/printImage.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/printImage.PNG -------------------------------------------------------------------------------- /email/res/printText.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/printText.PNG -------------------------------------------------------------------------------- /email/res/rotate180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/rotate180.png -------------------------------------------------------------------------------- /email/res/rotate270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/rotate270.png -------------------------------------------------------------------------------- /email/res/rotate90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/rotate90.png -------------------------------------------------------------------------------- /email/res/underline.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/underline.PNG -------------------------------------------------------------------------------- /email/background/bg_icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/bg_icon.jpg -------------------------------------------------------------------------------- /email/background/bg_login.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/bg_login.jpg -------------------------------------------------------------------------------- /email/background/icon_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_1.jpg -------------------------------------------------------------------------------- /email/background/icon_1_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_1_.jpg -------------------------------------------------------------------------------- /email/background/icon_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_2.jpg -------------------------------------------------------------------------------- /email/background/icon_2_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_2_.jpg -------------------------------------------------------------------------------- /email/background/icon_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_3.jpg -------------------------------------------------------------------------------- /email/background/icon_3_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_3_.jpg -------------------------------------------------------------------------------- /email/background/icon_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_4.jpg -------------------------------------------------------------------------------- /email/background/icon_4_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_4_.jpg -------------------------------------------------------------------------------- /email/background/icon_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_5.jpg -------------------------------------------------------------------------------- /email/background/icon_5_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_5_.jpg -------------------------------------------------------------------------------- /email/background/icon_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_6.jpg -------------------------------------------------------------------------------- /email/background/icon_6_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_6_.jpg -------------------------------------------------------------------------------- /email/background/icon_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_7.jpg -------------------------------------------------------------------------------- /email/background/icon_7_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_7_.jpg -------------------------------------------------------------------------------- /email/background/icon_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_8.jpg -------------------------------------------------------------------------------- /email/background/icon_8_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/icon_8_.jpg -------------------------------------------------------------------------------- /email/res/mirrorVertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/mirrorVertical.png -------------------------------------------------------------------------------- /email/background/Homepage_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/Homepage_1.png -------------------------------------------------------------------------------- /email/background/Homepage_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/Homepage_2.png -------------------------------------------------------------------------------- /email/background/Homepage_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/Homepage_3.png -------------------------------------------------------------------------------- /email/background/Homepage_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/Homepage_4.png -------------------------------------------------------------------------------- /email/background/bg_login2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/bg_login2.jpg -------------------------------------------------------------------------------- /email/background/bg_login2_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/bg_login2_.jpg -------------------------------------------------------------------------------- /email/background/bg_login3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/bg_login3.jpg -------------------------------------------------------------------------------- /email/background/bg_login3_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/bg_login3_.jpg -------------------------------------------------------------------------------- /email/res/mirrorHorizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/res/mirrorHorizontal.png -------------------------------------------------------------------------------- /email/background/background1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/background1.jpg -------------------------------------------------------------------------------- /email/background/bg_receiver.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/bg_receiver.jpg -------------------------------------------------------------------------------- /email/background/bg_receivertoum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Condor-G/Email/HEAD/email/background/bg_receivertoum.png -------------------------------------------------------------------------------- /email/user.h: -------------------------------------------------------------------------------- 1 | #ifndef USER_H 2 | #define USER_H 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | 10 | class User 11 | { 12 | public: 13 | bool ison; 14 | QString username; 15 | 16 | User(QString name); 17 | 18 | void init(); 19 | 20 | void changePasswd();//修改密码 21 | 22 | void retrievePasswd();//找回密码 23 | 24 | private: 25 | 26 | 27 | }; 28 | 29 | #endif // USER_H 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Email 2 | ![img](https://github.com/Condor-G/Email/blob/master/doc/img1.png) 3 | ### Introduction 4 | 基于Qt的简易内部电子邮件系统 5 | ### Dependency 6 | Qt 4.8.0 7 | ### Usage 8 | 首先要先注册账号,然后登陆账号。 9 | 发送邮件后,可以在个人信息中点击切换账号按钮,或者直接退出,登陆另一个账号在收件箱内查看邮件。 10 | 运行后,会在当前目录生成一个data的文件,就是数据库的存储文件。 11 | 12 | **目前已经实现的功能有:** 13 | - 注册账号 14 | - 发邮件 15 | - 收邮件 16 | - 删邮件 17 | - 标记星标邮件 18 | - 查看邮件信息 19 | - 更改个人信息 20 | 21 | **需要改进的地方:** 22 | - 程序是单机版,不能两台电脑互发邮件。 23 | - 有一些按钮仅仅留作一个接口,没有实现功能。 24 | -------------------------------------------------------------------------------- /email/login.h: -------------------------------------------------------------------------------- 1 | #ifndef LOGIN_H 2 | #define LOGIN_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | namespace Ui { 14 | class login; 15 | } 16 | 17 | class login : public QMainWindow 18 | { 19 | Q_OBJECT 20 | 21 | public: 22 | explicit login(QWidget *parent = nullptr); 23 | ~login(); 24 | void init(); 25 | 26 | private slots: 27 | bool eventFilter(QObject *obj, QEvent *event); 28 | 29 | void on_btn_login_clicked(); 30 | 31 | private: 32 | Ui::login *ui; 33 | }; 34 | 35 | #endif // LOGIN_H 36 | -------------------------------------------------------------------------------- /email/personinfo.h: -------------------------------------------------------------------------------- 1 | #ifndef PERSONINFO_H 2 | #define PERSONINFO_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | namespace Ui { 15 | class personInfo; 16 | } 17 | 18 | class personInfo : public QMainWindow 19 | { 20 | Q_OBJECT 21 | 22 | public: 23 | explicit personInfo(QString s,QWidget *parent = nullptr); 24 | ~personInfo(); 25 | 26 | private slots: 27 | void on_pushButton_clicked(); 28 | 29 | private: 30 | Ui::personInfo *ui; 31 | 32 | QString id; 33 | }; 34 | 35 | #endif // PERSONINFO_H 36 | -------------------------------------------------------------------------------- /email/receiver.h: -------------------------------------------------------------------------------- 1 | #ifndef RECEIVER_H 2 | #define RECEIVER_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | namespace Ui { 13 | class Receiver; 14 | } 15 | 16 | class Receiver : public QMainWindow 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | Receiver(QString s,QWidget *parent = nullptr); 22 | ~Receiver(); 23 | 24 | void init(); 25 | 26 | private slots: 27 | void on_Btn_readatttach_clicked(); 28 | 29 | void on_Btn_back_clicked(); 30 | 31 | private: 32 | Ui::Receiver *ui; 33 | QSqlQuery qry; 34 | QPixmap outImg; 35 | QString name; 36 | }; 37 | 38 | #endif // RECEIVER_H 39 | -------------------------------------------------------------------------------- /email/buttondelegate.h: -------------------------------------------------------------------------------- 1 | #ifndef BUTTONDELEGATE_H 2 | #define BUTTONDELEGATE_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include "receiver.h" 15 | 16 | 17 | class ButtonDelegate: public QStyledItemDelegate 18 | { 19 | public: 20 | explicit ButtonDelegate(QWidget *parent = 0); 21 | 22 | private slots: 23 | bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index); 24 | 25 | private: 26 | void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index)const; 27 | 28 | 29 | QRect CheckBoxRect(const QStyleOptionViewItem &viewItemStyleOptions)const; 30 | 31 | }; 32 | 33 | #endif // BUTTONDELEGATE_H 34 | -------------------------------------------------------------------------------- /email/main.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | QApplication a(argc, argv); 16 | 17 | QPixmap pix(":/res/splash2.gif"); 18 | QSplashScreen splash(pix); 19 | splash.setWindowOpacity(0.9); 20 | QLabel label(&splash); 21 | QMovie mv(":/res/splash2.gif"); 22 | label.setMovie(&mv); 23 | mv.start(); 24 | splash.show(); 25 | splash.setCursor(Qt::BlankCursor); 26 | a.processEvents(); 27 | for(int i=0;i<3200;i+=mv.speed()){ 28 | QCoreApplication::processEvents(); 29 | Sleep(mv.speed()); 30 | } 31 | 32 | 33 | login w; 34 | w.show(); 35 | 36 | splash.finish(&w); 37 | 38 | 39 | return a.exec(); 40 | } 41 | -------------------------------------------------------------------------------- /email/newuser.h: -------------------------------------------------------------------------------- 1 | #ifndef NEWUSER_H 2 | #define NEWUSER_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | namespace Ui { 17 | class newuser; 18 | } 19 | 20 | class newuser : public QMainWindow 21 | { 22 | Q_OBJECT 23 | 24 | public: 25 | explicit newuser(QWidget *parent = nullptr); 26 | ~newuser(); 27 | 28 | int check_name(); 29 | int check_passwd(); 30 | int check_passwd_same(); 31 | int check_code(); 32 | 33 | 34 | private slots: 35 | void updateTime(); 36 | 37 | void on_pushButton_clicked(); 38 | 39 | void on_textEdit_1(); 40 | 41 | void on_textEdit_2(); 42 | 43 | void on_textEdit_3(); 44 | 45 | void on_textEdit_5(); 46 | 47 | private: 48 | Ui::newuser *ui; 49 | 50 | VerificationCodeLabel* label_code; 51 | 52 | QTimer *timer; 53 | }; 54 | 55 | #endif // NEWUSER_H 56 | -------------------------------------------------------------------------------- /email/user.cpp: -------------------------------------------------------------------------------- 1 | #include "user.h" 2 | 3 | User::User(QString name) 4 | { 5 | username = name; 6 | init(); 7 | } 8 | 9 | void User::init() 10 | { 11 | QSqlQuery qry; 12 | qry.prepare( "CREATE TABLE IF NOT EXISTS message" 13 | "(id VARCHAR(30) PRIMARY KEY, " 14 | "sender VARCHAR(30), " 15 | "receiver VARCHAR(120), " 16 | "title VARCHAR(30), " 17 | "content VARCHAR(1000000), " 18 | "accessory VARCHAR(1000000), " 19 | "senddate DATE, " 20 | "state VARCHAR(20), " 21 | "read VARCHAR(10), " 22 | "important VARCHAR(10)" 23 | ")" ); 24 | if( !qry.exec() ) 25 | qDebug()<<"Table message created error "< 5 | #include 6 | #include 7 | 8 | class VerificationCodeLabel : public QLabel 9 | { 10 | Q_OBJECT 11 | 12 | public: 13 | VerificationCodeLabel(QWidget *parent=0); 14 | ~VerificationCodeLabel(); 15 | //返回一个字符串(字母一律都按照大写返回) 16 | QString getVerificationCode() const; 17 | 18 | protected: 19 | //重写绘制事件,以此来生成验证码 20 | void paintEvent(QPaintEvent *event); 21 | 22 | 23 | private: 24 | const int letter_number = 4;//产生字符的数量 25 | int noice_point_number ;//噪点的数量 26 | enum { 27 | NUMBER_FLAG, 28 | UPLETTER_FLAG, 29 | LOWLETTER_FLAG 30 | }; 31 | //这是一个用来生成验证码的函数 32 | void produceVerificationCode() const; 33 | //产生一个随机的字符 34 | QChar produceRandomLetter() const; 35 | //产生随机的颜色 36 | void produceRandomColor() const; 37 | 38 | void mousePressEvent(QMouseEvent *e); 39 | 40 | QChar *verificationCode; 41 | QColor *colorArray; 42 | }; 43 | 44 | #endif // VERIFICATIONCODELABEL_H 45 | -------------------------------------------------------------------------------- /email/receiver.cpp: -------------------------------------------------------------------------------- 1 | #include "receiver.h" 2 | #include "ui_receiver.h" 3 | 4 | 5 | Receiver::Receiver(QString s,QWidget *parent ) : 6 | QMainWindow(parent), 7 | ui(new Ui::Receiver) 8 | { 9 | ui->setupUi(this); 10 | setWindowTitle("邮件信息"); 11 | 12 | name = s; 13 | 14 | init(); 15 | 16 | 17 | } 18 | 19 | Receiver::~Receiver() 20 | { 21 | delete ui; 22 | } 23 | 24 | void Receiver::init() 25 | { 26 | 27 | qry.prepare( "select * from message where id = '"+name+"' " ); 28 | if( !qry.exec() ) 29 | qDebug() <<"display error"<label_Title->setText(qry.value(3).toString()); 36 | ui->label_sender->setText(qry.value(1).toString()); 37 | ui->label_reciever->setText(qry.value(2).toString()); 38 | ui->label_time->setText(qry.value(6).toString()); 39 | ui->textBrowser->setHtml(qry.value(4).toString()); 40 | 41 | } 42 | 43 | void Receiver::on_Btn_readatttach_clicked() 44 | { 45 | 46 | 47 | 48 | } 49 | 50 | void Receiver::on_Btn_back_clicked() 51 | { 52 | this->close(); 53 | } 54 | -------------------------------------------------------------------------------- /email/personinfo.cpp: -------------------------------------------------------------------------------- 1 | #include "personinfo.h" 2 | #include "ui_personinfo.h" 3 | #include "mainwindow.h" 4 | 5 | personInfo::personInfo(QString s,QWidget *parent) : 6 | QMainWindow(parent), 7 | ui(new Ui::personInfo) 8 | { 9 | ui->setupUi(this); 10 | setWindowTitle("修改信息"); 11 | 12 | id = s; 13 | } 14 | 15 | personInfo::~personInfo() 16 | { 17 | delete ui; 18 | } 19 | 20 | void personInfo::on_pushButton_clicked() 21 | { 22 | QSqlQuery qry; 23 | QString name = ui->lineEdit_name->text(); 24 | QString phone = ui->lineEdit_phone->text(); 25 | QString address = ui->lineEdit_address->text(); 26 | 27 | 28 | QString update = "UPDATE user SET " 29 | "name = '"+name+"'," 30 | "phone = '"+phone+"'," 31 | "address = '"+address+"' " 32 | "WHERE userid = '"+id+"' " ; 33 | qry.prepare(update); 34 | qDebug()<<"!!!!! "<close(); 41 | 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /email/email.pro: -------------------------------------------------------------------------------- 1 | #------------------------------------------------- 2 | # 3 | # Project created by QtCreator 2019-07-01T16:57:21 4 | # 5 | #------------------------------------------------- 6 | 7 | QT += core gui sql 8 | 9 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 10 | 11 | TARGET = email 12 | TEMPLATE = app 13 | 14 | # The following define makes your compiler emit warnings if you use 15 | # any feature of Qt which has been marked as deprecated (the exact warnings 16 | # depend on your compiler). Please consult the documentation of the 17 | # deprecated API in order to know how to port your code away from it. 18 | DEFINES += QT_DEPRECATED_WARNINGS 19 | 20 | # You can also make your code fail to compile if you use deprecated APIs. 21 | # In order to do so, uncomment the following line. 22 | # You can also select to disable deprecated APIs only up to a certain version of Qt. 23 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 24 | 25 | CONFIG += c++11 26 | 27 | SOURCES += \ 28 | main.cpp \ 29 | mainwindow.cpp \ 30 | user.cpp \ 31 | login.cpp \ 32 | newuser.cpp \ 33 | buttondelegate.cpp \ 34 | verificationcodelabel.cpp \ 35 | receiver.cpp \ 36 | personinfo.cpp 37 | 38 | HEADERS += \ 39 | mainwindow.h \ 40 | user.h \ 41 | login.h \ 42 | newuser.h \ 43 | buttondelegate.h \ 44 | verificationcodelabel.h \ 45 | receiver.h \ 46 | personinfo.h 47 | 48 | FORMS += \ 49 | mainwindow.ui \ 50 | login.ui \ 51 | newuser.ui \ 52 | receiver.ui \ 53 | personinfo.ui 54 | 55 | # Default rules for deployment. 56 | qnx: target.path = /tmp/$${TARGET}/bin 57 | else: unix:!android: target.path = /opt/$${TARGET}/bin 58 | !isEmpty(target.path): INSTALLS += target 59 | 60 | RESOURCES += \ 61 | res.qrc 62 | 63 | DISTFILES += \ 64 | background/Homepage_1.png \ 65 | background/Homepage_2.png \ 66 | background/Homepage_3.png \ 67 | background/Homepage_4.png 68 | 69 | 70 | RC_ICONS = icon.ico 71 | -------------------------------------------------------------------------------- /email/res.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | img/login.png 4 | img/passwd.png 5 | img/gray_star.png 6 | img/red_star.png 7 | img/unread.png 8 | 9 | 10 | res/add.png 11 | res/bcolor.png 12 | res/bold.PNG 13 | res/brush.png 14 | res/center.PNG 15 | res/color.PNG 16 | res/copy.PNG 17 | res/cut.PNG 18 | res/exit.PNG 19 | res/fontsize.png 20 | res/italic.PNG 21 | res/justify.PNG 22 | res/left.PNG 23 | res/mirrorHorizontal.png 24 | res/mirrorVertical.png 25 | res/new.png 26 | res/open.png 27 | res/paste.PNG 28 | res/printImage.PNG 29 | res/printText.PNG 30 | res/redo.PNG 31 | res/right.PNG 32 | res/rotate90.png 33 | res/rotate180.png 34 | res/rotate270.png 35 | res/save.png 36 | res/send.PNG 37 | res/underline.PNG 38 | res/undo.PNG 39 | res/zoomin.PNG 40 | res/zoomout.PNG 41 | res/Logo.PNG 42 | res/Logo2.PNG 43 | background/background1.jpg 44 | background/bg.jpg 45 | background/bg_icon.jpg 46 | background/bg_login.jpg 47 | background/bg_login2.jpg 48 | background/bg_login2_.jpg 49 | background/bg_login3.jpg 50 | background/bg_login3_.jpg 51 | background/bg_receiver.jpg 52 | background/icon_1_.jpg 53 | background/icon_2_.jpg 54 | background/icon_3_.jpg 55 | background/icon_4_.jpg 56 | background/icon_5_.jpg 57 | background/icon_6_.jpg 58 | background/icon_7_.jpg 59 | background/icon_8_.jpg 60 | background/Homepage_1.png 61 | background/Homepage_2.png 62 | background/Homepage_3.png 63 | background/Homepage_4.png 64 | icon.ico 65 | background/bg_receivertoum.png 66 | res/splash.gif 67 | res/splash2.gif 68 | res/time.JPG 69 | 70 | 71 | -------------------------------------------------------------------------------- /email/verificationcodelabel.cpp: -------------------------------------------------------------------------------- 1 | #include "verificationcodelabel.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | VerificationCodeLabel::VerificationCodeLabel(QWidget *parent) 9 | : QLabel(parent) 10 | { 11 | //生成随机种子 12 | qsrand(QTime::currentTime().second() * 1000 + QTime::currentTime().msec()); 13 | colorArray = new QColor[letter_number]; 14 | verificationCode = new QChar[letter_number]; 15 | noice_point_number = this->width(); 16 | } 17 | 18 | 19 | /** 20 | * 重写绘制事件,以此来生成验证码 21 | */ 22 | void VerificationCodeLabel::paintEvent(QPaintEvent *event) 23 | { 24 | QPainter painter(this); 25 | QPoint p; 26 | //背景设为白色 27 | painter.fillRect(this->rect(), Qt::white); 28 | //产生4个不同的字符 29 | produceVerificationCode(); 30 | //产生4个不同的颜色 31 | produceRandomColor(); 32 | //绘制验证码 33 | for (int i = 0; i < letter_number; ++i) 34 | { 35 | p.setX(i*(this->width() / letter_number)+this->width()/8); 36 | p.setY(this->height() / 2); 37 | painter.setFont(QFont("宋体",20,QFont::Bold)); 38 | painter.setPen(colorArray[i]); 39 | painter.drawText(p, QString(verificationCode[i])); 40 | } 41 | //绘制噪点 42 | for (int j = 0; j < noice_point_number; ++j) 43 | { 44 | p.setX(qrand() % this->width()); 45 | p.setY(qrand() % this->height()); 46 | painter.setPen(colorArray[j % 4]); 47 | painter.drawPoint(p); 48 | } 49 | qDebug()<<"!!!!!!!"<97?cTemp.toUpper():cTemp; 105 | s += cTemp; 106 | } 107 | return s; 108 | } 109 | 110 | 111 | 112 | VerificationCodeLabel::~VerificationCodeLabel() 113 | { 114 | 115 | } 116 | 117 | /** 118 | * 鼠标单击事件,刷新验证码 119 | */ 120 | void VerificationCodeLabel::mousePressEvent(QMouseEvent *e) 121 | { 122 | qDebug()<<"??????"; 123 | repaint(); 124 | 125 | } 126 | 127 | -------------------------------------------------------------------------------- /email/personinfo.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | personInfo 4 | 5 | 6 | 7 | 0 8 | 0 9 | 410 10 | 245 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | #personInfo{background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:0.614, stop:0 rgba(255, 224, 170, 255), stop:1 rgba(255, 255, 255, 255));\n} 18 | 19 | 20 | 21 | 22 | 23 | 40 24 | 40 25 | 54 26 | 12 27 | 28 | 29 | 30 | 姓名 31 | 32 | 33 | 34 | 35 | 36 | 40 37 | 80 38 | 54 39 | 12 40 | 41 | 42 | 43 | 电话 44 | 45 | 46 | 47 | 48 | 49 | 40 50 | 120 51 | 54 52 | 12 53 | 54 | 55 | 56 | 地址 57 | 58 | 59 | 60 | 61 | 62 | 110 63 | 40 64 | 141 65 | 21 66 | 67 | 68 | 69 | 70 | 71 | 72 | 110 73 | 80 74 | 141 75 | 21 76 | 77 | 78 | 79 | 80 | 81 | 82 | 110 83 | 120 84 | 241 85 | 21 86 | 87 | 88 | 89 | 90 | 91 | 92 | 150 93 | 160 94 | 93 95 | 28 96 | 97 | 98 | 99 | 确认修改 100 | 101 | 102 | 103 | 104 | 105 | 106 | 0 107 | 0 108 | 410 109 | 23 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /email/buttondelegate.cpp: -------------------------------------------------------------------------------- 1 | #include "buttondelegate.h" 2 | 3 | 4 | ButtonDelegate::ButtonDelegate(QWidget *parent) : 5 | QStyledItemDelegate(parent) 6 | { 7 | 8 | } 9 | 10 | void ButtonDelegate::paint(QPainter * painter, 11 | const QStyleOptionViewItem & option, 12 | const QModelIndex & index) const 13 | { 14 | if (index.column() == 0) 15 | { 16 | //获取值 17 | bool checked = index.model()->data(index, Qt::DisplayRole).toBool(); 18 | //按钮的风格选项 19 | QStyleOptionButton *checkBoxOption = new QStyleOptionButton(); 20 | checkBoxOption->state |= QStyle::State_Enabled; 21 | //根据值判断是否选中 22 | if(checked){ 23 | checkBoxOption->state |= QStyle::State_On; 24 | } 25 | else{ 26 | checkBoxOption->state |= QStyle::State_Off; 27 | } 28 | //返回QCheckBox几何形状 29 | checkBoxOption->rect = CheckBoxRect(option); 30 | //绘制QCheckBox 31 | QApplication::style()->drawControl(QStyle::CE_CheckBox,checkBoxOption,painter); 32 | 33 | } 34 | else if(index.column()==3){ 35 | QPixmap star; 36 | if(index.data().toString()=="yes") star.load(":/img/img/red_star.png"); 37 | else if(index.data().toString()=="no") star.load(":/img/img/gray_star.png"); 38 | 39 | int width=star.width(); 40 | int height=star.height(); 41 | QRect rect=option.rect; 42 | int x=rect.x()+rect.width()/2-width/2; 43 | int y=rect.y()+rect.height()/2-height/2; 44 | 45 | painter->drawPixmap(x,y,star); 46 | } 47 | else if(index.column()==1){ 48 | bool b; 49 | if(index.data().toString()=="no") b = true; 50 | else if(index.data().toString()=="yes") b= false; 51 | QPixmap star; 52 | if(b) star=QPixmap(":/img/img/unread.png"); 53 | int width=star.width(); 54 | int height=star.height(); 55 | QRect rect=option.rect; 56 | int x=rect.x()+rect.width()/2-width/2; 57 | int y=rect.y()+rect.height()/2-height/2; 58 | 59 | painter->drawPixmap(x,y,star); 60 | } 61 | else{ 62 | QStyledItemDelegate::paint(painter, option, index); 63 | } 64 | 65 | 66 | } 67 | 68 | /** 69 | * 绘制CheckBox 70 | */ 71 | QRect ButtonDelegate::CheckBoxRect(const QStyleOptionViewItem &viewItemStyleOptions)const 72 | { 73 | //绘制按钮所需要的参数 74 | QStyleOptionButton StyleOption; 75 | //按照给定的风格参数 返回元素子区域 76 | QRect Rect = QApplication::style()->subElementRect( QStyle::SE_CheckBoxIndicator, &StyleOption); 77 | //返回QCheckBox坐标 78 | QPoint checkBoxPoint(viewItemStyleOptions.rect.x() + viewItemStyleOptions.rect.width() / 2 - Rect.width() / 2, 79 | viewItemStyleOptions.rect.y() + viewItemStyleOptions.rect.height() / 2 - Rect.height() / 2); 80 | //返回QCheckBox几何形状 81 | return QRect(checkBoxPoint, Rect.size()); 82 | } 83 | 84 | 85 | /** 86 | * 设置CheckBox可以选择 87 | */ 88 | bool ButtonDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) 89 | { 90 | if (event->type() == QEvent::MouseButtonPress ) 91 | { 92 | if (index.column() == 0){ 93 | bool data = model->data(index, Qt::DisplayRole).toBool(); 94 | model->setData(index, !data, Qt::DisplayRole); 95 | } 96 | } 97 | 98 | return QStyledItemDelegate::editorEvent(event, model, option, index); 99 | } 100 | 101 | -------------------------------------------------------------------------------- /email/login.cpp: -------------------------------------------------------------------------------- 1 | #include "login.h" 2 | #include "ui_login.h" 3 | #include "mainwindow.h" 4 | 5 | login::login(QWidget *parent) : 6 | QMainWindow(parent), 7 | ui(new Ui::login) 8 | { 9 | ui->setupUi(this); 10 | setWindowTitle("登录"); 11 | 12 | init(); 13 | 14 | ui->label_newuser->installEventFilter(this);//安装事件过滤器 15 | 16 | ui->textEdit_passwd->setEchoMode(QLineEdit::Password); 17 | } 18 | 19 | login::~login() 20 | { 21 | delete ui; 22 | } 23 | 24 | 25 | /** 26 | * 初始化数据库 27 | * 新建用户信息表 28 | */ 29 | void login::init() 30 | { 31 | QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE"); 32 | db.setHostName("localhost"); 33 | db.setUserName("root"); 34 | db.setDatabaseName("data"); 35 | db.open(); 36 | bool ok=db.open(); 37 | if(ok){ 38 | qDebug()<<"open database success"; 39 | } 40 | else{ 41 | qDebug()<<"error open database because"; 42 | } 43 | 44 | //创建用户表 45 | //用户账号、密码、密保问题、密保问题答案 46 | QSqlQuery qry; 47 | qry.prepare( "CREATE TABLE IF NOT EXISTS user " 48 | "(userid VARCHAR(30) PRIMARY KEY, " 49 | "passwd VARCHAR(30), " 50 | "question VARCHAR(40), " 51 | "answer VARCHAR(30), " 52 | "name VARCHAR(40), " 53 | "address VARCHAR(60), " 54 | "phone VARCHAR(40), " 55 | "time DATE, " 56 | "icon VARCHAR(60)" 57 | ")" ); 58 | if( !qry.exec() ) 59 | qDebug()<<"Table created error "<label_newuser)//指定某个QLabel 71 | { 72 | if (event->type() == QEvent::MouseButtonPress)//mouse button pressed 73 | { 74 | QMouseEvent *mouseEvent = static_cast(event); 75 | if(mouseEvent->button() == Qt::LeftButton) 76 | { 77 | newuser *n = new newuser(); 78 | n->show(); 79 | 80 | } 81 | else 82 | { 83 | return false; 84 | } 85 | } 86 | else 87 | { 88 | return false; 89 | } 90 | } 91 | else 92 | { 93 | // pass the event on to the parent class 94 | return login::eventFilter(obj, event); 95 | } 96 | } 97 | 98 | 99 | /** 100 | * 登录按钮 101 | * 检查邮件名和密码 102 | * 如果正确,进入主界面MainWindow 103 | */ 104 | void login::on_btn_login_clicked() 105 | { 106 | QSqlQuery qry; 107 | QString name = ui->textEdit_user->text(); 108 | qry.prepare( "select count(*) from user where userid = '"+name+"'" ); 109 | if( !qry.exec() ) 110 | qDebug() <<"Select error"<textEdit_passwd->text(); 127 | if(passwd==qry.value(0).toString()){ 128 | this->close();//关闭当前窗口 129 | MainWindow *w = new MainWindow(name); 130 | w->show();//展示主窗口 131 | } 132 | else{ 133 | QMessageBox::information(this,"提示","密码错误!"); 134 | } 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /email/mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include "user.h" 38 | #include "buttondelegate.h" 39 | #include "login.h" 40 | #include "personinfo.h" 41 | 42 | 43 | namespace Ui { 44 | class MainWindow; 45 | } 46 | 47 | class MainWindow : public QMainWindow 48 | { 49 | Q_OBJECT 50 | 51 | public: 52 | explicit MainWindow(QString name,QWidget *parent = nullptr); 53 | 54 | ~MainWindow(); 55 | 56 | void init_sendLetter(); 57 | 58 | void init_tableWidget(); 59 | 60 | void init_person(); 61 | 62 | void mergeFormat(QTextCharFormat format); 63 | 64 | 65 | 66 | void saveImg(const QString &imgFileName, QString sn); 67 | 68 | public slots: 69 | 70 | void ShowAlignment(int id); 71 | 72 | void unredo(int id); 73 | 74 | void showUnderlineButton(); 75 | 76 | private slots: 77 | 78 | void ShowFontComboBox(QString comboStr); 79 | 80 | void ShowSizeSpinBox(QString spinValue); 81 | 82 | void ShowBoldBtn(); 83 | 84 | void ShowItalicBtn(); 85 | 86 | void ShowColorBtn(); 87 | 88 | void ShowCurrentFormatChanged(const QTextCharFormat &fmt); 89 | 90 | void ShowCursorPositionChanged(); 91 | 92 | void on_Btn_add_clicked(); 93 | 94 | void display(QString name); 95 | 96 | void on_textEdit_cursorPositionChanged(); 97 | 98 | void button_send(); 99 | 100 | void updateTime(); 101 | 102 | void on_tableView_clicked(const QModelIndex &index); 103 | 104 | void on_tableView_star_clicked(const QModelIndex &index); 105 | 106 | void on_tableView_draft_clicked(const QModelIndex &index); 107 | 108 | void on_tableView_sended_clicked(const QModelIndex &index); 109 | 110 | void on_tableView_bin_clicked(const QModelIndex &index); 111 | 112 | void on_tableView_rubbish_clicked(const QModelIndex &index); 113 | 114 | void on_btn_receive_selectall_clicked(); 115 | 116 | 117 | void on_pushButton_readall_clicked(); 118 | 119 | void on_btn_receive_delete_clicked(); 120 | 121 | void on_btn_receive_deleteall_clicked(); 122 | 123 | void on_Btn_draft_clicked(); 124 | 125 | void on_listWidget_itemClicked(QListWidgetItem *item); 126 | 127 | void on_btn_star_selectall_clicked(); 128 | 129 | void on_btn_star_cancel_clicked(); 130 | 131 | 132 | void on_btn_draft_delete_clicked(); 133 | 134 | void on_btn_bin_recover_clicked(); 135 | 136 | void on_btn_bin_selectAll_clicked(); 137 | 138 | void on_btn_bin_delete_clicked(); 139 | 140 | void on_btn_rubbish_selectAll_clicked(); 141 | 142 | void on_btn_rubbish_recover_clicked(); 143 | 144 | void on_btn_rubbish_delete_clicked(); 145 | 146 | void on_changepic_clicked(); 147 | 148 | void on_btn_person_back_clicked(); 149 | 150 | void on_btn_person_update_clicked(); 151 | 152 | void on_toolButton_clicked(); 153 | 154 | private: 155 | Ui::MainWindow *ui; 156 | 157 | QTimer *timer; 158 | 159 | QHBoxLayout *toplayout; 160 | QGridLayout *middlelayout; 161 | QHBoxLayout *Buttonlayout; 162 | QHBoxLayout *buttomlayout; 163 | QVBoxLayout *MainLayout; 164 | 165 | QLabel *fontLabel1; 166 | QFontComboBox *fontComboBox; 167 | QLabel *fontLabel2; 168 | QComboBox *sizeComboBox; 169 | QToolButton *boldBtn; 170 | QToolButton *italicBtn; 171 | QToolButton *underlineBtn; 172 | QToolButton *colorBtn; 173 | 174 | QToolButton *undoAction; 175 | QToolButton *redoAction; 176 | QToolButton *action; 177 | 178 | QLabel *listLabel; 179 | QComboBox *listComboBox; 180 | QToolButton *leftAction; 181 | QToolButton *rightAction; 182 | QToolButton *centerAction; 183 | QToolButton *justifyAction; 184 | 185 | QButtonGroup *Btgrp2; 186 | QButtonGroup *Btgrp; 187 | 188 | QString save_filename; 189 | QString save_name; 190 | QFileDialog *FileDlg; 191 | 192 | //database 193 | QSqlDatabase db; 194 | QSqlQuery query; 195 | QPixmap outImg; 196 | 197 | QStandardItemModel *model; 198 | QStandardItemModel *model_star; 199 | QStandardItemModel *model_draft; 200 | QStandardItemModel *model_sended; 201 | QStandardItemModel *model_bin; 202 | QStandardItemModel *model_rubbish; 203 | 204 | User *user; 205 | 206 | 207 | }; 208 | 209 | #endif // MAINWINDOW_H 210 | -------------------------------------------------------------------------------- /email/newuser.cpp: -------------------------------------------------------------------------------- 1 | #include "newuser.h" 2 | #include "ui_newuser.h" 3 | #include "user.h" 4 | #include "login.h" 5 | 6 | newuser::newuser(QWidget *parent) : 7 | QMainWindow(parent), 8 | ui(new Ui::newuser) 9 | { 10 | ui->setupUi(this); 11 | 12 | label_code = new VerificationCodeLabel; 13 | 14 | ui->layout->addWidget(label_code); 15 | 16 | timer = new QTimer(); 17 | timer->start(2000); 18 | connect(timer, SIGNAL(timeout()),this, SLOT(updateTime())); 19 | 20 | } 21 | 22 | void newuser::updateTime() 23 | { 24 | on_textEdit_1(); 25 | on_textEdit_2(); 26 | on_textEdit_3(); 27 | on_textEdit_5(); 28 | } 29 | 30 | 31 | newuser::~newuser() 32 | { 33 | delete ui; 34 | } 35 | 36 | /** 37 | * 检查邮箱地址是否符合要求:6~18个字符,可使用字母、数字、下划线,需以字母开头 38 | * return 39 | * 0 : 符合 40 | * 1 : 字符太少 41 | * 2 : 字符太多 42 | * 3 : 首字符不是字母 43 | * 4 : 存在不合法的字符 44 | */ 45 | int newuser::check_name() 46 | { 47 | QString s = ui->textEdit_1->toPlainText(); 48 | if(!( (s[0]>='a'&&s[0]<='z')||(s[0]>='A'&&s[0]<='Z') )) return 3; 49 | for(int i=0;i='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')||s[i]=='_'||(s[i]>='0'&&s[i]<='9'))) return 4; 51 | } 52 | if(s.size()<6) return 1; 53 | if(s.size()>18) return 2; 54 | return 0; 55 | } 56 | 57 | /** 58 | * 检查密码是否符合要求:6~16个字符,区分大小写 59 | * return 60 | * 0 : 符合要求 61 | * 1 : 字符太少 62 | * 2 : 字符太多 63 | */ 64 | int newuser::check_passwd() 65 | { 66 | QString x = ui->textEdit_2->toPlainText(); 67 | if(x.size()<6) return 1; 68 | else if(x.size()>16) return 2; 69 | return 0; 70 | } 71 | 72 | /** 73 | * 检查两次输入的密码是否一致 74 | * return 75 | * 1 : 一致 76 | * 0 : 不一致 77 | */ 78 | int newuser::check_passwd_same() 79 | { 80 | QString a = ui->textEdit_2->toPlainText(); 81 | QString b = ui->textEdit_3->toPlainText(); 82 | if(a==b) return 1; 83 | else return 0; 84 | } 85 | 86 | /** 87 | * 检查验证码是否一致 88 | * return 89 | * 1 : 一致 90 | * 0 : 不一致 91 | */ 92 | int newuser::check_code() 93 | { 94 | QString code = ui->textEdit_5->toPlainText(); 95 | if(label_code->getVerificationCode()==code){ 96 | return 1; 97 | } 98 | else{ 99 | return 0; 100 | } 101 | } 102 | 103 | /** 104 | * "立即注册"按钮 105 | * 将用户信息添加到数据库 106 | * Insert into user(userid,passwd) values('name'+'passwd'); 107 | */ 108 | void newuser::on_pushButton_clicked() 109 | { 110 | if(check_code()==0){ 111 | QMessageBox::information(this,"提示","验证码错误!"); 112 | return; 113 | } 114 | if(check_name()==0&&check_passwd()==0&&check_passwd_same()==1&&check_code()==1&&ui->radioButton->isChecked()){ 115 | QSqlQuery query; 116 | QString name = ui->textEdit_1->toPlainText(); 117 | QString passwd = ui->textEdit_2->toPlainText(); 118 | QDateTime time = QDateTime::currentDateTime(); 119 | QString InsertStr = QString("INSERT INTO user(" 120 | "userid, " 121 | "passwd, " 122 | "time " 123 | ") " 124 | "VALUES(" 125 | "'"+name+"', " 126 | "'"+passwd+"', " 127 | "'"+time.toString("yyyy-MM-dd hh:mm:ss")+"' " 128 | ");"); 129 | query.prepare(InsertStr); 130 | qDebug()<stop(); 138 | qDebug()<<"insert data success!"; 139 | QMessageBox::information(this,"提示","注册成功!"); 140 | this->close(); 141 | } 142 | } 143 | else { 144 | QMessageBox::information(this,"提示","请完善信息"); 145 | } 146 | } 147 | 148 | 149 | /** 150 | * 检测邮件名的合法性 151 | * 在label中给予提示 152 | */ 153 | void newuser::on_textEdit_1() 154 | { 155 | QSqlQuery qry; 156 | QString name = ui->textEdit_1->toPlainText(); 157 | 158 | if(name=="") { 159 | ui->label_11->setText("6~18个字符,可使用字母、数字、下划线,需以字母开头"); 160 | return; 161 | } 162 | 163 | qry.prepare( "select count(*) from user where userid = '"+name+"'" ); 164 | if( !qry.exec() ) 165 | qDebug() <<"Select error"<label_11->setText("可以使用"); 174 | } 175 | else if(t==1){ 176 | ui->label_11->setText("长度太短,最少6个字符"); 177 | } 178 | else if(t==2){ 179 | ui->label_11->setText("长度过长,最多18个字符"); 180 | } 181 | else if(t==3){ 182 | ui->label_11->setText("要以字母开头"); 183 | } 184 | else if(t==4){ 185 | ui->label_11->setText("含非法字符"); 186 | } 187 | 188 | 189 | } 190 | else{ 191 | ui->label_11->setText("该用户名已经被注册"); 192 | } 193 | 194 | } 195 | 196 | /** 197 | * 检测密码的合理性 198 | * 并在label中给予提示 199 | */ 200 | void newuser::on_textEdit_2() 201 | { 202 | QString passwd = ui->textEdit_2->toPlainText(); 203 | if(passwd==""){ 204 | ui->label_22->setText("6~16个字符,区分大小写"); 205 | return; 206 | } 207 | 208 | int t = check_passwd(); 209 | if(t==0){ 210 | ui->label_22->setText("符合要求"); 211 | } 212 | else if(t==1){ 213 | ui->label_22->setText("长度太短,最少6个字符"); 214 | } 215 | else if(t==2){ 216 | ui->label_22->setText("长度过长,最多16个字符"); 217 | } 218 | } 219 | 220 | 221 | /** 222 | * 检测确定密码是否一致 223 | * 在lalel中给予提示 224 | */ 225 | void newuser::on_textEdit_3() 226 | { 227 | QString passwd = ui->textEdit_3->toPlainText(); 228 | if(passwd==""){ 229 | ui->label_33->setText("请再次填写密码"); 230 | return; 231 | } 232 | if(check_passwd_same()){ 233 | ui->label_33->setText("符合"); 234 | } 235 | else{ 236 | ui->label_33->setText("密码不一致"); 237 | } 238 | } 239 | 240 | /** 241 | * 检测验证码是否正确 242 | * 在label中给予提示 243 | */ 244 | void newuser::on_textEdit_5() 245 | { 246 | if(ui->textEdit_5->toPlainText()==""){ 247 | ui->label_55->setText("请填写图片中的字符,区分大小写"); 248 | return; 249 | } 250 | if(check_code()){ 251 | ui->label_55->setText("正确"); 252 | } 253 | else{ 254 | if(ui->textEdit_5->toPlainText().length()==4) 255 | ui->label_55->setText("验证码错误"); 256 | } 257 | } 258 | -------------------------------------------------------------------------------- /email/receiver.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Receiver 4 | 5 | 6 | 7 | 0 8 | 0 9 | 875 10 | 635 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | #Receiver{background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 170, 0, 255), stop:1 rgba(255, 255, 255, 255));} 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 80 28 | 20 29 | 30 | 31 | 32 | 33 | 80 34 | 20 35 | 36 | 37 | 38 | 回复 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 新宋体 47 | 10 48 | 49 | 50 | 51 | 收件人: 52 | 53 | 54 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 新宋体 63 | 10 64 | 65 | 66 | 67 | 查看附件 68 | 69 | 70 | true 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 80 79 | 20 80 | 81 | 82 | 83 | 84 | 80 85 | 20 86 | 87 | 88 | 89 | 返回 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 新宋体 98 | 10 99 | 100 | 101 | 102 | 下载附件 103 | 104 | 105 | true 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 新宋体 114 | 10 115 | 116 | 117 | 118 | 1个(ImgPrecessor.png) 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 新宋体 127 | 10 128 | 129 | 130 | 131 | 发件人: 132 | 133 | 134 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 新宋体 143 | 10 144 | 145 | 146 | 147 | 时 间: 148 | 149 | 150 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 80 159 | 20 160 | 161 | 162 | 163 | 164 | 80 165 | 20 166 | 167 | 168 | 169 | 删除 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 新宋体 178 | 10 179 | 180 | 181 | 182 | 附 件: 183 | 184 | 185 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 186 | 187 | 188 | 189 | 190 | 191 | 192 | Qt::Horizontal 193 | 194 | 195 | 196 | 40 197 | 20 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | border-image: url(:/background/bg_receivertoum.png); 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 新宋体 216 | 10 217 | 218 | 219 | 220 | xiaoyue_xie<xiaoyue_xie@126.com> 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 新宋体 229 | 10 230 | 231 | 232 | 233 | 2019年07月01日 18:03 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 新宋体 242 | 10 243 | 244 | 245 | 246 | xiexy<xiexy@nwafu.edu.cn> 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | Times New Roman 255 | 14 256 | 75 257 | true 258 | 259 | 260 | 261 | ImgProcrssor 262 | 263 | 264 | 265 | 266 | 267 | 268 | Qt::Horizontal 269 | 270 | 271 | 272 | 40 273 | 20 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 0 286 | 0 287 | 875 288 | 23 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | -------------------------------------------------------------------------------- /email/login.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | login 4 | 5 | 6 | 7 | 0 8 | 0 9 | 696 10 | 563 11 | 12 | 13 | 14 | 15 | 320 16 | 0 17 | 18 | 19 | 20 | MainWindow 21 | 22 | 23 | #login{background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:0.614, stop:0 rgba(255, 224, 170, 255), stop:1 rgba(255, 255, 255, 255)); 24 | } 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 0 36 | 20 37 | 38 | 39 | 40 | 41 | 16777215 42 | 20 43 | 44 | 45 | 46 | PointingHandCursor 47 | 48 | 49 | 十日内免登录 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 25 58 | 25 59 | 60 | 61 | 62 | 63 | 25 64 | 25 65 | 66 | 67 | 68 | 69 | 70 | 71 | :/img/img/passwd.png 72 | 73 | 74 | true 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 25 83 | 25 84 | 85 | 86 | 87 | 88 | 25 89 | 25 90 | 91 | 92 | 93 | 94 | 95 | 96 | :/img/img/login.png 97 | 98 | 99 | true 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 0 108 | 40 109 | 110 | 111 | 112 | 113 | 16777215 114 | 40 115 | 116 | 117 | 118 | PointingHandCursor 119 | 120 | 121 | 登录 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 0 130 | 20 131 | 132 | 133 | 134 | 135 | 16777215 136 | 40 137 | 138 | 139 | 140 | PointingHandCursor 141 | 142 | 143 | 忘记密码? 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 0 152 | 25 153 | 154 | 155 | 156 | 157 | 16777215 158 | 25 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 100 168 | 100 169 | 100 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 100 179 | 100 180 | 100 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 120 190 | 120 191 | 120 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | @nwafu.com 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 0 208 | 20 209 | 210 | 211 | 212 | 213 | 16777215 214 | 25 215 | 216 | 217 | 218 | PointingHandCursor 219 | 220 | 221 | 注册账号 222 | 223 | 224 | Qt::AlignCenter 225 | 226 | 227 | 228 | 229 | 230 | 231 | Qt::Horizontal 232 | 233 | 234 | 235 | 40 236 | 20 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 150 246 | 150 247 | 248 | 249 | 250 | 251 | 250 252 | 250 253 | 254 | 255 | 256 | border-image: url(:/background/bg_login3_.jpg); 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | Qt::Horizontal 267 | 268 | 269 | 270 | 40 271 | 20 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 0 290 | 0 291 | 696 292 | 23 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | -------------------------------------------------------------------------------- /email/newuser.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | newuser 4 | 5 | 6 | 7 | 0 8 | 0 9 | 552 10 | 515 11 | 12 | 13 | 14 | 注册新账号 15 | 16 | 17 | #newuser{background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 218, 153, 255), stop:1 rgba(255, 255, 255, 255));} 18 | 19 | 20 | 21 | 22 | 23 | QTabWidget::Rounded 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 16777215 37 | 31 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | Qt::Horizontal 46 | 47 | 48 | 49 | 40 50 | 20 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Qt::Vertical 59 | 60 | 61 | 62 | 20 63 | 40 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 100 77 | 100 78 | 100 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 100 88 | 100 89 | 100 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 120 99 | 120 100 | 120 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 6~16个字符,区分大小写 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 80 117 | 0 118 | 119 | 120 | 121 | 122 | 16777215 123 | 31 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 100 133 | 100 134 | 100 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 100 144 | 100 145 | 100 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 120 155 | 120 156 | 120 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | Times New Roman 166 | 10 167 | 168 | 169 | 170 | @nwafu.com 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 16777215 179 | 31 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 100 193 | 100 194 | 100 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 100 204 | 100 205 | 100 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 120 215 | 120 216 | 120 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 6~18个字符,可使用字母、数字、下划线,需以字母开头 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 0 233 | 20 234 | 235 | 236 | 237 | 同意"服务条款" 238 | 239 | 240 | 241 | 242 | 243 | 244 | Qt::Vertical 245 | 246 | 247 | 248 | 20 249 | 40 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | Qt::Vertical 258 | 259 | 260 | 261 | 20 262 | 40 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | Qt::Vertical 271 | 272 | 273 | 274 | 20 275 | 40 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 100 289 | 100 290 | 100 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 100 300 | 100 301 | 100 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 120 311 | 120 312 | 120 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 请再次填写密码 321 | 322 | 323 | 324 | 325 | 326 | 327 | Qt::Vertical 328 | 329 | 330 | 331 | 20 332 | 40 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 16777215 342 | 31 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | Qt::Horizontal 351 | 352 | 353 | 354 | 40 355 | 20 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 16777215 365 | 31 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | Qt::Horizontal 374 | 375 | 376 | 377 | 40 378 | 20 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | Qt::Horizontal 387 | 388 | 389 | 390 | 40 391 | 20 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 16777215 401 | 60 402 | 403 | 404 | 405 | 立即注册 406 | 407 | 408 | 409 | 410 | 411 | 412 | Qt::Horizontal 413 | 414 | 415 | 416 | 40 417 | 20 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | Qt::Horizontal 426 | 427 | 428 | 429 | 40 430 | 20 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | Qt::Horizontal 439 | 440 | 441 | 442 | 40 443 | 20 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | Qt::Horizontal 452 | 453 | 454 | 455 | 40 456 | 20 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | Qt::Horizontal 465 | 466 | 467 | 468 | 40 469 | 20 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | Qt::Horizontal 478 | 479 | 480 | 481 | 40 482 | 20 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 0 492 | 20 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 100 502 | 100 503 | 100 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 100 513 | 100 514 | 100 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 120 524 | 120 525 | 120 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 请填写图片中的字符,区分大小写 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | <span style=" color:#ff0000; background-color:#ffffff;">*</span>邮箱地址 544 | 545 | 546 | 547 | 548 | 549 | 550 | <span style=" color:#ff0000; background-color:#ffffff;">*</span>密码 551 | 552 | 553 | 554 | 555 | 556 | 557 | <span style=" color:#ff0000; background-color:#ffffff;">*</span>确认密码 558 | 559 | 560 | 561 | 562 | 563 | 564 | <span style=" color:#ff0000; background-color:#ffffff;">*</span>验证码 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 0 576 | 0 577 | 552 578 | 23 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | -------------------------------------------------------------------------------- /email/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1117 10 | 735 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | #MainWindow{background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255, 235, 151, 255), stop:1 rgba(255, 255, 255, 255));} 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 120 27 | 16777215 28 | 29 | 30 | 31 | 32 | 12 33 | 34 | 35 | 36 | background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 170, 0, 255), stop:1 rgba(255, 255, 255, 255)); 37 | 38 | 39 | QFrame::Raised 40 | 41 | 42 | 0 43 | 44 | 45 | 46 | 30 47 | 30 48 | 49 | 50 | 51 | 52 | 首页 53 | 54 | 55 | 56 | :/background/icon_4_.jpg:/background/icon_4_.jpg 57 | 58 | 59 | 60 | 61 | 写信 62 | 63 | 64 | 65 | :/background/icon_1_.jpg:/background/icon_1_.jpg 66 | 67 | 68 | 69 | 70 | 收件箱 71 | 72 | 73 | 74 | :/background/icon_7_.jpg:/background/icon_7_.jpg 75 | 76 | 77 | 78 | 79 | 星标邮件 80 | 81 | 82 | 83 | :/background/icon_5_.jpg:/background/icon_5_.jpg 84 | 85 | 86 | 87 | 88 | 草稿箱 89 | 90 | 91 | 92 | :/background/icon_8_.jpg:/background/icon_8_.jpg 93 | 94 | 95 | 96 | 97 | 已发送 98 | 99 | 100 | 101 | :/background/icon_6_.jpg:/background/icon_6_.jpg 102 | 103 | 104 | 105 | 106 | 回收站 107 | 108 | 109 | 110 | :/background/icon_2_.jpg:/background/icon_2_.jpg 111 | 112 | 113 | 114 | 115 | 垃圾箱 116 | 117 | 118 | 119 | :/background/icon_3_.jpg:/background/icon_3_.jpg 120 | 121 | 122 | 123 | 124 | 个人信息 125 | 126 | 127 | 128 | :/background/bg_login2_.jpg:/background/bg_login2_.jpg 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 1 137 | 138 | 139 | 140 | #page_Homepage{background-color: rgb(254, 232, 183);} 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | Qt::Horizontal 150 | 151 | 152 | 153 | 40 154 | 20 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | Qt::Vertical 163 | 164 | 165 | 166 | 20 167 | 40 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 华文琥珀 177 | 12 178 | 179 | 180 | 181 | 个人信息 182 | 183 | 184 | Qt::AlignCenter 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 华文琥珀 193 | 12 194 | 195 | 196 | 197 | 星际邮件 198 | 199 | 200 | Qt::AlignCenter 201 | 202 | 203 | 204 | 205 | 206 | 207 | Qt::Vertical 208 | 209 | 210 | 211 | 20 212 | 40 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | Qt::Vertical 221 | 222 | 223 | 224 | 20 225 | 40 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 150 235 | 150 236 | 237 | 238 | 239 | 240 | 150 241 | 150 242 | 243 | 244 | 245 | border-image: url(:/background/Homepage_2.png); 246 | 247 | 248 | 249 | 250 | 251 | false 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 华文琥珀 260 | 12 261 | 262 | 263 | 264 | 写信 265 | 266 | 267 | Qt::AlignCenter 268 | 269 | 270 | 271 | 272 | 273 | 274 | Qt::Vertical 275 | 276 | 277 | 278 | 20 279 | 40 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | Qt::Vertical 288 | 289 | 290 | 291 | 20 292 | 40 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 150 302 | 150 303 | 304 | 305 | 306 | 307 | 150 308 | 150 309 | 310 | 311 | 312 | border-image: url(:/background/Homepage_3.png); 313 | 314 | 315 | 316 | 317 | 318 | false 319 | 320 | 321 | 322 | 323 | 324 | 325 | Qt::Vertical 326 | 327 | 328 | 329 | 20 330 | 40 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | Qt::Vertical 339 | 340 | 341 | 342 | 20 343 | 40 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 150 353 | 150 354 | 355 | 356 | 357 | 358 | 150 359 | 150 360 | 361 | 362 | 363 | border-image: url(:/background/Homepage_4.png); 364 | 365 | 366 | 367 | 368 | 369 | false 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 方正姚体 378 | 24 379 | 380 | 381 | 382 | 惜时光,演绎精彩人生 383 | 384 | 385 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 150 394 | 150 395 | 396 | 397 | 398 | 399 | 150 400 | 150 401 | 402 | 403 | 404 | border-image: url(:/background/Homepage_1.png); 405 | 406 | 407 | 408 | 409 | 410 | false 411 | 412 | 413 | 414 | 415 | 416 | 417 | Qt::Vertical 418 | 419 | 420 | 421 | 20 422 | 40 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 华文琥珀 432 | 12 433 | 434 | 435 | 436 | 未读邮件 437 | 438 | 439 | Qt::AlignCenter 440 | 441 | 442 | 443 | 444 | 445 | 446 | Qt::Horizontal 447 | 448 | 449 | 450 | 40 451 | 20 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 150 461 | 30 462 | 463 | 464 | 465 | 466 | 300 467 | 16777215 468 | 469 | 470 | 471 | 472 | 方正姚体 473 | 24 474 | 475 | 476 | 477 | XXX 478 | 479 | 480 | Qt::AlignCenter 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 640 493 | 50 494 | 61 495 | 31 496 | 497 | 498 | 499 | 日程邀请 500 | 501 | 502 | true 503 | 504 | 505 | 506 | 507 | 508 | 170 509 | 550 510 | 61 511 | 31 512 | 513 | 514 | 515 | 取消 516 | 517 | 518 | 519 | 520 | 521 | 520 522 | 50 523 | 61 524 | 31 525 | 526 | 527 | 528 | 密送 529 | 530 | 531 | true 532 | 533 | 534 | 535 | 536 | 537 | 210 538 | 50 539 | 51 540 | 31 541 | 542 | 543 | 544 | 存草稿 545 | 546 | 547 | 548 | 549 | 550 | 100 551 | 130 552 | 54 553 | 12 554 | 555 | 556 | 557 | 558 | color: rgb(255, 122, 6); 559 | 560 | 561 | 主 题: 562 | 563 | 564 | 565 | 566 | 567 | 100 568 | 100 569 | 54 570 | 12 571 | 572 | 573 | 574 | 575 | color: rgb(255, 122, 6); 576 | 577 | 578 | 收件人: 579 | 580 | 581 | 582 | 583 | 584 | 150 585 | 120 586 | 551 587 | 20 588 | 589 | 590 | 591 | 592 | background-color: rgb(255, 232, 137); 593 | 594 | 595 | 596 | 597 | 598 | 110 599 | 520 600 | 251 601 | 16 602 | 603 | 604 | 605 | 发件人:XXX 606 | 607 | 608 | 609 | 610 | 611 | 360 612 | 150 613 | 80 614 | 28 615 | 616 | 617 | 618 | hover{ background-color: rgb(0, 85, 0); } 619 | 620 | 621 | 622 | 添加附件 623 | 624 | 625 | 626 | :/res/add.png:/res/add.png 627 | 628 | 629 | 630 | 20 631 | 20 632 | 633 | 634 | 635 | true 636 | 637 | 638 | 639 | 640 | 641 | 100 642 | 50 643 | 61 644 | 31 645 | 646 | 647 | 648 | background-color: rgb(255, 143, 15); 649 | 650 | 651 | 发送 652 | 653 | 654 | 655 | :/res/send.PNG:/res/send.PNG 656 | 657 | 658 | 659 | 660 | 661 | 160 662 | 50 663 | 51 664 | 31 665 | 666 | 667 | 668 | 669 | 670 | 671 | 预览 672 | 673 | 674 | 675 | 676 | true 677 | 678 | 679 | 680 | 460 681 | 50 682 | 61 683 | 31 684 | 685 | 686 | 687 | 抄送 688 | 689 | 690 | true 691 | 692 | 693 | 694 | 695 | 696 | 260 697 | 50 698 | 51 699 | 31 700 | 701 | 702 | 703 | 取消 704 | 705 | 706 | 707 | 708 | 709 | 580 710 | 50 711 | 61 712 | 31 713 | 714 | 715 | 716 | 群发单显 717 | 718 | 719 | true 720 | 721 | 722 | 723 | 724 | 725 | 150 726 | 100 727 | 551 728 | 20 729 | 730 | 731 | 732 | 733 | background-color: rgb(255, 232, 137); 734 | 735 | 736 | 737 | 738 | 739 | 100 740 | 180 741 | 651 742 | 421 743 | 744 | 745 | 746 | 747 | 748 | 749 | 100 750 | 550 751 | 61 752 | 31 753 | 754 | 755 | 756 | background-color: rgb(255, 143, 15); 757 | 758 | 759 | 发送 760 | 761 | 762 | 763 | :/res/send.PNG:/res/send.PNG 764 | 765 | 766 | 767 | 768 | 769 | 660 770 | 150 771 | 21 772 | 21 773 | 774 | 775 | 776 | ... 777 | 778 | 779 | 780 | :/res/time.JPG:/res/time.JPG 781 | 782 | 783 | 784 | 24 785 | 24 786 | 787 | 788 | 789 | true 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 全部选择 803 | 804 | 805 | 806 | 807 | 808 | 809 | 全部已读 810 | 811 | 812 | 813 | 814 | 815 | 816 | 删除 817 | 818 | 819 | 820 | 821 | 822 | 823 | 彻底删除 824 | 825 | 826 | 827 | 828 | 829 | 830 | Qt::Horizontal 831 | 832 | 833 | 834 | 40 835 | 20 836 | 837 | 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 全部选择 859 | 860 | 861 | 862 | 863 | 864 | 865 | 取消星标 866 | 867 | 868 | 869 | 870 | 871 | 872 | Qt::Horizontal 873 | 874 | 875 | 876 | 40 877 | 20 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | 897 | 898 | 899 | 900 | 删除 901 | 902 | 903 | 904 | 905 | 906 | 907 | Qt::Horizontal 908 | 909 | 910 | 911 | 40 912 | 20 913 | 914 | 915 | 916 | 917 | 918 | 919 | 920 | 921 | 922 | 923 | 924 | 925 | 926 | 927 | 928 | 929 | 930 | 931 | 932 | 933 | 934 | 935 | 936 | 937 | 938 | 939 | 940 | 941 | 942 | 选择全部 943 | 944 | 945 | 946 | 947 | 948 | 949 | 恢复 950 | 951 | 952 | 953 | 954 | 955 | 956 | 彻底删除 957 | 958 | 959 | 960 | 961 | 962 | 963 | Qt::Horizontal 964 | 965 | 966 | 967 | 40 968 | 20 969 | 970 | 971 | 972 | 973 | 974 | 975 | 976 | 977 | 978 | 979 | 980 | 981 | 982 | 983 | 984 | 985 | 986 | 987 | 988 | 989 | 990 | 991 | 全部选择 992 | 993 | 994 | 995 | 996 | 997 | 998 | 恢复 999 | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 彻底删除 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | 1012 | Qt::Horizontal 1013 | 1014 | 1015 | 1016 | 40 1017 | 20 1018 | 1019 | 1020 | 1021 | 1022 | 1023 | 1024 | 1025 | 1026 | 1027 | 1028 | 1029 | 1030 | 1031 | 1032 | 1033 | 1034 | 1035 | 1036 | 1037 | 1038 | Qt::Vertical 1039 | 1040 | 1041 | 1042 | 20 1043 | 40 1044 | 1045 | 1046 | 1047 | 1048 | 1049 | 1050 | 1051 | 1052 | 1053 | Qt::Horizontal 1054 | 1055 | 1056 | 1057 | 40 1058 | 20 1059 | 1060 | 1061 | 1062 | 1063 | 1064 | 1065 | 1066 | 1067 | 1068 | 1069 | 300 1070 | 40 1071 | 1072 | 1073 | 1074 | 1075 | 300 1076 | 40 1077 | 1078 | 1079 | 1080 | 1081 | 方正姚体 1082 | 14 1083 | 1084 | 1085 | 1086 | XXX 1087 | 1088 | 1089 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 1090 | 1091 | 1092 | 1093 | 1094 | 1095 | 1096 | 1097 | 300 1098 | 40 1099 | 1100 | 1101 | 1102 | 1103 | 300 1104 | 40 1105 | 1106 | 1107 | 1108 | 1109 | 方正姚体 1110 | 14 1111 | 1112 | 1113 | 1114 | XXX 1115 | 1116 | 1117 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 1118 | 1119 | 1120 | 1121 | 1122 | 1123 | 1124 | 1125 | 80 1126 | 20 1127 | 1128 | 1129 | 1130 | 1131 | 80 1132 | 20 1133 | 1134 | 1135 | 1136 | 切换账号 1137 | 1138 | 1139 | false 1140 | 1141 | 1142 | 1143 | 1144 | 1145 | 1146 | 1147 | 150 1148 | 40 1149 | 1150 | 1151 | 1152 | 1153 | 150 1154 | 40 1155 | 1156 | 1157 | 1158 | 1159 | 方正姚体 1160 | 14 1161 | 1162 | 1163 | 1164 | 地址: 1165 | 1166 | 1167 | Qt::AlignCenter 1168 | 1169 | 1170 | 1171 | 1172 | 1173 | 1174 | 1175 | 300 1176 | 40 1177 | 1178 | 1179 | 1180 | 1181 | 300 1182 | 40 1183 | 1184 | 1185 | 1186 | 1187 | 方正姚体 1188 | 14 1189 | 1190 | 1191 | 1192 | XXX 1193 | 1194 | 1195 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 1196 | 1197 | 1198 | 1199 | 1200 | 1201 | 1202 | 1203 | 150 1204 | 40 1205 | 1206 | 1207 | 1208 | 1209 | 150 1210 | 40 1211 | 1212 | 1213 | 1214 | 1215 | 方正姚体 1216 | 14 1217 | 1218 | 1219 | 1220 | 姓名: 1221 | 1222 | 1223 | Qt::AlignCenter 1224 | 1225 | 1226 | 1227 | 1228 | 1229 | 1230 | 1231 | 150 1232 | 40 1233 | 1234 | 1235 | 1236 | 1237 | 150 1238 | 40 1239 | 1240 | 1241 | 1242 | 1243 | 方正姚体 1244 | 14 1245 | 1246 | 1247 | 1248 | 邮箱名: 1249 | 1250 | 1251 | Qt::AlignCenter 1252 | 1253 | 1254 | 1255 | 1256 | 1257 | 1258 | 1259 | 300 1260 | 40 1261 | 1262 | 1263 | 1264 | 1265 | 300 1266 | 40 1267 | 1268 | 1269 | 1270 | 1271 | 方正姚体 1272 | 14 1273 | 1274 | 1275 | 1276 | XXX 1277 | 1278 | 1279 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 1280 | 1281 | 1282 | 1283 | 1284 | 1285 | 1286 | 1287 | 方正姚体 1288 | 14 1289 | 1290 | 1291 | 1292 | 头像: 1293 | 1294 | 1295 | Qt::AlignCenter 1296 | 1297 | 1298 | 1299 | 1300 | 1301 | 1302 | 1303 | 150 1304 | 40 1305 | 1306 | 1307 | 1308 | 1309 | 150 1310 | 40 1311 | 1312 | 1313 | 1314 | 1315 | 方正姚体 1316 | 14 1317 | 1318 | 1319 | 1320 | 创建时间: 1321 | 1322 | 1323 | Qt::AlignCenter 1324 | 1325 | 1326 | 1327 | 1328 | 1329 | 1330 | 修改头像 1331 | 1332 | 1333 | 1334 | 1335 | 1336 | 1337 | 1338 | 200 1339 | 200 1340 | 1341 | 1342 | 1343 | 1344 | 200 1345 | 200 1346 | 1347 | 1348 | 1349 | 1350 | border-image: url(:/background/bg.jpg); 1351 | 1352 | 1353 | 1354 | 1355 | 1356 | Qt::AlignCenter 1357 | 1358 | 1359 | 1360 | 1361 | 1362 | 1363 | 1364 | 300 1365 | 40 1366 | 1367 | 1368 | 1369 | 1370 | 300 1371 | 40 1372 | 1373 | 1374 | 1375 | 1376 | 方正姚体 1377 | 14 1378 | 1379 | 1380 | 1381 | XXX 1382 | 1383 | 1384 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 1385 | 1386 | 1387 | 1388 | 1389 | 1390 | 1391 | 1392 | 150 1393 | 40 1394 | 1395 | 1396 | 1397 | 1398 | 150 1399 | 40 1400 | 1401 | 1402 | 1403 | 1404 | 方正姚体 1405 | 14 1406 | 1407 | 1408 | 1409 | 电话: 1410 | 1411 | 1412 | Qt::AlignCenter 1413 | 1414 | 1415 | 1416 | 1417 | 1418 | 1419 | 1420 | 80 1421 | 20 1422 | 1423 | 1424 | 1425 | 1426 | 80 1427 | 20 1428 | 1429 | 1430 | 1431 | 修改个人信息 1432 | 1433 | 1434 | false 1435 | 1436 | 1437 | 1438 | 1439 | 1440 | 1441 | 1442 | 1443 | Qt::Horizontal 1444 | 1445 | 1446 | 1447 | 40 1448 | 20 1449 | 1450 | 1451 | 1452 | 1453 | 1454 | 1455 | 1456 | 1457 | 1458 | Qt::Vertical 1459 | 1460 | 1461 | 1462 | 20 1463 | 40 1464 | 1465 | 1466 | 1467 | 1468 | 1469 | 1470 | 1471 | 1472 | 1473 | 1474 | 1475 | 1476 | 1477 | 1478 | 1479 | 0 1480 | 0 1481 | 1117 1482 | 23 1483 | 1484 | 1485 | 1486 | 1487 | 1488 | TopToolBarArea 1489 | 1490 | 1491 | false 1492 | 1493 | 1494 | 1495 | 1496 | 1497 | 1498 | 1499 | 1500 | 1501 | 1502 | -------------------------------------------------------------------------------- /email/mainwindow.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | #include "ui_mainwindow.h" 3 | #include "user.h" 4 | 5 | #include 6 | #include 7 | 8 | MainWindow::MainWindow(QString name,QWidget *parent) : 9 | QMainWindow(parent), 10 | ui(new Ui::MainWindow) 11 | { 12 | ui->setupUi(this); 13 | setWindowTitle("我的邮箱"); 14 | 15 | //连接listWidget和stackedWidget 16 | connect(ui->listWidget,SIGNAL(currentRowChanged(int)),ui->stackedWidget,SLOT(setCurrentIndex(int))); 17 | 18 | user = new User(name); 19 | 20 | init_sendLetter(); 21 | 22 | //tableWidget布局 23 | init_tableWidget(); 24 | 25 | init_person(); 26 | 27 | 28 | timer = new QTimer(); 29 | timer->start(10000); 30 | connect(timer, SIGNAL(timeout()),this, SLOT(updateTime())); 31 | 32 | //添加表内信息 33 | display(user->username); 34 | 35 | } 36 | 37 | /** 38 | * 刷新tableWidget 39 | */ 40 | void MainWindow::updateTime() 41 | { 42 | display(user->username); 43 | init_person(); 44 | } 45 | 46 | 47 | MainWindow::~MainWindow() 48 | { 49 | delete ui; 50 | } 51 | 52 | /** 53 | * 个人信息 54 | */ 55 | void MainWindow::init_person() 56 | { 57 | QSqlQuery qry; 58 | qry.prepare( "SELECT * from user WHERE userid = '"+user->username+"' " ); 59 | if( !qry.exec() ) 60 | qDebug() << qry.lastError(); 61 | else 62 | qDebug( "SELECT!" ); 63 | qry.next(); 64 | ui->label_person_id->setText(user->username); 65 | ui->label_person_name->setText(qry.value(4).toString()); 66 | ui->label_person_address->setText(qry.value(5).toString()); 67 | ui->label_person_phone->setText(qry.value(6).toString()); 68 | ui->label_person_time->setText(qry.value(7).toString()); 69 | if(qry.value(8).toString()!="") ui->label_18->setStyleSheet("\nborder-image: url("+qry.value(8).toString()+");"); 70 | 71 | if(qry.value(4).toString()!=""){ 72 | ui->label_firstPage_name->setText(qry.value(4).toString()+",您好"); 73 | } 74 | 75 | else{ 76 | ui->label_firstPage_name->setText(user->username+",您好"); 77 | } 78 | 79 | 80 | 81 | 82 | } 83 | 84 | 85 | void MainWindow::init_sendLetter() 86 | { 87 | MainLayout = new QVBoxLayout(this); 88 | toplayout = new QHBoxLayout(); 89 | toplayout->addWidget(ui->Btn_send); 90 | toplayout->addWidget(ui->Btn_preview); 91 | toplayout->addWidget(ui->Btn_draft); 92 | toplayout->addWidget(ui->Btn_cancel); 93 | toplayout->addStretch(); 94 | toplayout->addWidget(ui->Btn_resend); 95 | toplayout->addWidget(ui->Btn_sendsecret); 96 | toplayout->addWidget(ui->Btn_qfdx); 97 | toplayout->addWidget(ui->Btn_invite); 98 | 99 | middlelayout = new QGridLayout; 100 | middlelayout->addWidget(ui->label_reciever,0,0); 101 | middlelayout->addWidget(ui->Editor_reciever,0,1); 102 | middlelayout->addWidget(ui->label_theme,1,0); 103 | middlelayout->addWidget(ui->Editor_theme,1,1); 104 | 105 | Buttonlayout = new QHBoxLayout(); 106 | 107 | fontLabel1 = new QLabel(tr("字体:")); 108 | fontComboBox = new QFontComboBox; 109 | fontComboBox->setFontFilters(QFontComboBox::ScalableFonts); 110 | 111 | fontLabel2 = new QLabel(tr("字号:")); 112 | sizeComboBox = new QComboBox; 113 | QFontDatabase db; 114 | foreach(int size, db.standardSizes()) 115 | { 116 | sizeComboBox->addItem(QString::number(size)); 117 | } 118 | 119 | QSize size(24,24); 120 | 121 | boldBtn = new QToolButton; 122 | boldBtn->setIcon(QIcon(":/res/bold.PNG")); 123 | boldBtn->setCheckable(true); 124 | boldBtn->setIconSize(size); 125 | boldBtn->setAutoRaise(true); 126 | 127 | italicBtn = new QToolButton; 128 | italicBtn->setIcon(QIcon(":/res/italic.PNG")); 129 | italicBtn->setCheckable(true); 130 | italicBtn->setIconSize(size); 131 | italicBtn->setAutoRaise(true); 132 | 133 | underlineBtn = new QToolButton; 134 | underlineBtn->setIcon(QIcon(":/res/underline.PNG")); 135 | underlineBtn->setCheckable(true); 136 | underlineBtn->setIconSize(size); 137 | underlineBtn->setAutoRaise(true); 138 | 139 | colorBtn = new QToolButton; 140 | colorBtn->setIcon(QIcon(":/res/color.PNG")); 141 | colorBtn->setIconSize(size); 142 | colorBtn->setAutoRaise(true); 143 | 144 | Btgrp2 = new QButtonGroup; 145 | //undo/redo Action 146 | undoAction = new QToolButton; 147 | undoAction->setIcon(QIcon(":/res/undo.PNG")); 148 | undoAction->setIconSize(size); 149 | undoAction->setAutoRaise(true); 150 | Btgrp2->addButton(undoAction,1); 151 | 152 | redoAction= new QToolButton; 153 | redoAction->setIcon(QIcon(":/res/redo.PNG")); 154 | redoAction->setIconSize(size); 155 | redoAction->setAutoRaise(true); 156 | Btgrp2->addButton(redoAction,2); 157 | connect(Btgrp2,SIGNAL(buttonClicked(int)),this,SLOT(unredo(int))); 158 | 159 | //排版 160 | Btgrp = new QButtonGroup; 161 | leftAction= new QToolButton; 162 | leftAction->setIcon(QIcon(":/res/left.PNG")); 163 | leftAction->setCheckable(true); 164 | leftAction->setIconSize(size); 165 | leftAction->setAutoRaise(true); 166 | Btgrp->addButton(leftAction,1); 167 | 168 | rightAction= new QToolButton; 169 | rightAction->setIcon(QIcon(":/res/right.PNG")); 170 | rightAction->setCheckable(true); 171 | rightAction->setIconSize(size); 172 | rightAction->setAutoRaise(true); 173 | Btgrp->addButton(rightAction,2); 174 | 175 | centerAction= new QToolButton; 176 | centerAction->setIcon(QIcon(":/res/center.PNG")); 177 | centerAction->setCheckable(true); 178 | centerAction->setIconSize(size); 179 | centerAction->setAutoRaise(true); 180 | Btgrp->addButton(centerAction,3); 181 | 182 | justifyAction= new QToolButton; 183 | justifyAction->setIcon(QIcon(":/res/justify.PNG")); 184 | justifyAction->setCheckable(true); 185 | justifyAction->setIconSize(size); 186 | justifyAction->setAutoRaise(true); 187 | Btgrp->addButton(justifyAction,4); 188 | connect(Btgrp,SIGNAL(buttonClicked(int)),this,SLOT(ShowAlignment(int))); 189 | 190 | Buttonlayout->addWidget(boldBtn); 191 | Buttonlayout->addWidget(italicBtn); 192 | Buttonlayout->addWidget(underlineBtn); 193 | Buttonlayout->addWidget(colorBtn); 194 | 195 | Buttonlayout->addWidget(leftAction); 196 | Buttonlayout->addWidget(centerAction); 197 | Buttonlayout->addWidget(rightAction); 198 | Buttonlayout->addWidget(justifyAction); 199 | 200 | Buttonlayout->addWidget(fontLabel2); 201 | Buttonlayout->addWidget(sizeComboBox); 202 | Buttonlayout->addWidget(fontLabel1); 203 | Buttonlayout->addWidget(fontComboBox); 204 | 205 | // Buttonlayout->addWidget(action); 206 | Buttonlayout->addWidget(undoAction); 207 | Buttonlayout->addWidget(redoAction); 208 | Buttonlayout->addWidget(ui->toolButton); 209 | 210 | Buttonlayout->addWidget(ui->Btn_add); 211 | Buttonlayout->addStretch(); 212 | 213 | buttomlayout = new QHBoxLayout(); 214 | buttomlayout->addWidget(ui->Btn_send_2); 215 | buttomlayout->addWidget(ui->Btn_cancel_2); 216 | buttomlayout->addStretch(); 217 | 218 | MainLayout->addLayout(toplayout); 219 | MainLayout->addLayout(middlelayout); 220 | MainLayout->addLayout(Buttonlayout); 221 | MainLayout->addWidget(ui->textEdit); 222 | MainLayout->addWidget(ui->label_sender); 223 | MainLayout->addLayout(buttomlayout); 224 | 225 | ui->page_Writeletter->setLayout(MainLayout); 226 | 227 | connect(fontComboBox,SIGNAL(activated(QString)),this,SLOT(ShowFontComboBox(QString))); 228 | connect(sizeComboBox,SIGNAL(activated(QString)),this,SLOT(ShowSizeSpinBox(QString))); 229 | connect(boldBtn,SIGNAL(clicked()),this,SLOT(ShowBoldBtn())); 230 | connect(italicBtn,SIGNAL(clicked()),this,SLOT(ShowItalicBtn())); 231 | connect(underlineBtn,SIGNAL(clicked()),this,SLOT(showUnderlineButton())); 232 | connect(colorBtn,SIGNAL(clicked()),this,SLOT(ShowColorBtn())); 233 | connect( ui->textEdit, SIGNAL( currentCharFormatChanged( const QTextCharFormat & ) ), this, SLOT( ShowCurrentFormatChanged(const QTextCharFormat&))); 234 | 235 | connect(ui->Btn_send,SIGNAL(clicked()),this,SLOT(button_send())); 236 | connect(ui->Btn_send_2,SIGNAL(clicked()),this,SLOT(button_send())); 237 | } 238 | 239 | 240 | 241 | void MainWindow::ShowBoldBtn() 242 | { 243 | QTextCharFormat fmt; 244 | fmt.setFontWeight(boldBtn->isChecked()?QFont::Bold:QFont::Normal); 245 | ui->textEdit->mergeCurrentCharFormat(fmt); 246 | } 247 | 248 | void MainWindow::ShowItalicBtn() 249 | { 250 | QTextCharFormat fmt; 251 | fmt.setFontItalic(italicBtn->isChecked()); 252 | ui->textEdit->mergeCurrentCharFormat(fmt); 253 | } 254 | 255 | void MainWindow::showUnderlineButton() 256 | { 257 | QTextCharFormat fmt; 258 | fmt.setFontUnderline(underlineBtn->isChecked()); 259 | ui->textEdit->mergeCurrentCharFormat(fmt); 260 | qDebug()<<"underline!!!"; 261 | } 262 | 263 | void MainWindow::ShowColorBtn() 264 | { 265 | QColor color = QColorDialog::getColor(Qt::red,this); 266 | 267 | if(color.isValid()){ 268 | QTextCharFormat fmt; 269 | fmt.setForeground(color); 270 | ui->textEdit->mergeCurrentCharFormat(fmt); 271 | } 272 | } 273 | 274 | void MainWindow::ShowAlignment(int id) 275 | { 276 | qDebug()<<"id:"<textEdit->setAlignment(Qt::AlignLeft); 279 | } 280 | if(id==2){ 281 | ui->textEdit->setAlignment(Qt::AlignRight); 282 | } 283 | if(id==3){ 284 | ui->textEdit->setAlignment(Qt::AlignCenter); 285 | } 286 | if(id==4){ 287 | ui->textEdit->setAlignment(Qt::AlignJustify); 288 | } 289 | } 290 | 291 | void MainWindow::unredo(int id) 292 | { 293 | if(id==1){ 294 | ui->textEdit->undo(); 295 | } 296 | if(id==2){ 297 | ui->textEdit->redo(); 298 | } 299 | } 300 | 301 | void MainWindow::ShowCurrentFormatChanged(const QTextCharFormat &fmt) 302 | { 303 | fontComboBox->setCurrentIndex(fontComboBox->findText(fmt.fontFamily())); 304 | sizeComboBox->setCurrentIndex(sizeComboBox->findText(QString::number(fmt.fontPointSize()))); 305 | boldBtn->setChecked(fmt.font().bold()); 306 | italicBtn->setChecked(fmt.fontItalic()); 307 | underlineBtn->setChecked(fmt.fontUnderline()); 308 | } 309 | 310 | void MainWindow::ShowFontComboBox(QString comboStr) 311 | { 312 | QTextCharFormat fmt; 313 | fmt.setFontFamily(comboStr); 314 | mergeFormat(fmt); 315 | } 316 | 317 | void MainWindow::mergeFormat(QTextCharFormat format) 318 | { 319 | QTextCursor cursor = ui->textEdit->textCursor(); 320 | if(!cursor.hasSelection()){ 321 | cursor.select(QTextCursor::WordUnderCursor); 322 | } 323 | cursor.mergeCharFormat(format); 324 | ui->textEdit->mergeCurrentCharFormat(format); 325 | } 326 | 327 | void MainWindow::ShowSizeSpinBox(QString spinValue) 328 | { 329 | QTextCharFormat fmt; 330 | fmt.setFontPointSize(spinValue.toDouble()); 331 | ui->textEdit->mergeCurrentCharFormat(fmt); 332 | } 333 | 334 | 335 | void MainWindow::ShowCursorPositionChanged() 336 | { 337 | if(ui->textEdit->alignment()==Qt::AlignLeft) 338 | leftAction->setChecked(true); 339 | if(ui->textEdit->alignment()==Qt::AlignRight) 340 | rightAction->setChecked(true); 341 | if(ui->textEdit->alignment()==Qt::AlignCenter) 342 | centerAction->setChecked(true); 343 | if(ui->textEdit->alignment()==Qt::AlignJustify) 344 | justifyAction->setChecked(true); 345 | } 346 | 347 | /** 348 | * 保存图片到File内,File是存所有附件图片的文件夹 349 | */ 350 | void MainWindow::saveImg(const QString &imgFileName,QString sn) 351 | { 352 | QFile inImg(save_filename); 353 | QImage img; 354 | if(!inImg.open(QIODevice::ReadOnly)){ 355 | QMessageBox::warning(0,"Error","Open Image File Failed"); 356 | return; 357 | } 358 | else{ 359 | if(!(img.load(save_filename))) 360 | { 361 | QMessageBox::information(this,tr("Open failed!"),tr("Failed!")); 362 | return; 363 | } 364 | } 365 | QDir *file = new QDir; 366 | bool exist = file->exists("./File"); 367 | if(exist) 368 | qDebug()<<"File exits!"; 369 | else { 370 | bool ok = file->mkdir("./File"); 371 | if(ok){ 372 | qDebug()<<"file success!"; 373 | } 374 | } 375 | QString savename="./File/"+sn; 376 | img.save(savename); 377 | } 378 | 379 | 380 | /** 381 | * 添加附件图片 382 | */ 383 | void MainWindow::on_Btn_add_clicked() 384 | { 385 | save_filename = QFileDialog::getOpenFileName(this,"Choose a file...","."); 386 | QString str=save_filename.section('.',-1); 387 | save_name = save_filename.section("/",-1); 388 | ui->Btn_add->setText(save_name); 389 | } 390 | 391 | 392 | void MainWindow::on_textEdit_cursorPositionChanged() 393 | { 394 | ShowCursorPositionChanged(); 395 | } 396 | 397 | void MainWindow::button_send() 398 | { 399 | if(save_filename!="") saveImg(save_filename,save_name); 400 | 401 | QDateTime time = QDateTime::currentDateTime(); 402 | 403 | if(ui->Editor_reciever->text()==""){ 404 | QMessageBox::information(this,"提示","请输入收件人!"); 405 | return; 406 | } 407 | if(ui->Editor_theme->text()==""){ 408 | QMessageBox::information(this,"提示","请输入邮件的主题!"); 409 | return; 410 | } 411 | if(ui->textEdit->toPlainText()==""){ 412 | QMessageBox::information(this,"提示","请输入内容!"); 413 | return; 414 | } 415 | 416 | QString nname; 417 | if(save_filename=="") nname="null"; 418 | else nname = save_filename; 419 | 420 | QString InsertStr = QString("INSERT INTO message(" 421 | "id, " 422 | "sender, " 423 | "receiver, " 424 | "title, " 425 | "content, " 426 | "accessory, " 427 | "senddate, " 428 | "state, " 429 | "read," 430 | "important)" 431 | 432 | "VALUES(" 433 | "'"+user->username+time.toString("yyyyMMddhhmmss")+"', " 434 | "'"+user->username+"', " 435 | "'"+ui->Editor_reciever->text()+"', " 436 | "'"+ui->Editor_theme->text()+"', " 437 | "'"+ui->textEdit->toHtml().replace("'","\"") +"', " 438 | "'"+nname+"', " 439 | "'"+time.toString("yyyy-MM-dd hh:mm:ss")+"', " 440 | "'sended', " 441 | "'no', " 442 | "'no' " 443 | " ); " 444 | ); 445 | 446 | query.prepare(InsertStr); 447 | qDebug()<username); 456 | 457 | ui->Editor_reciever->clear(); 458 | ui->Editor_theme->clear(); 459 | ui->textEdit->clear(); 460 | 461 | QMessageBox::information(this,"提示","发送成功!"); 462 | } 463 | 464 | 465 | /** 466 | * 发送邮件的发送按钮 467 | */ 468 | void MainWindow::on_Btn_draft_clicked() 469 | { 470 | if(save_filename!="") saveImg(save_filename,save_name); 471 | 472 | QDateTime time = QDateTime::currentDateTime(); 473 | 474 | if(ui->Editor_reciever->text()==""){ 475 | QMessageBox::information(this,"提示","请输入收件人!"); 476 | return; 477 | } 478 | if(ui->Editor_theme->text()==""){ 479 | QMessageBox::information(this,"提示","请输入邮件的主题!"); 480 | return; 481 | } 482 | if(ui->textEdit->toPlainText()==""){ 483 | QMessageBox::information(this,"提示","请输入内容!"); 484 | return; 485 | } 486 | 487 | QString InsertStr = QString("INSERT INTO message(" 488 | "id, " 489 | "sender, " 490 | "receiver, " 491 | "title, " 492 | "content, " 493 | "senddate, " 494 | "state, " 495 | "read," 496 | "important)" 497 | 498 | "VALUES(" 499 | "'"+user->username+time.toString("yyyyMMddhhmmss")+"', " 500 | "'"+user->username+"', " 501 | "'"+ui->Editor_reciever->text()+"', " 502 | "'"+ui->Editor_theme->text()+"', " 503 | "'"+ui->textEdit->toHtml().replace("'","\"")+"', " 504 | "'"+time.toString("yyyy-MM-dd hh:mm:ss")+"', " 505 | "'draft', " 506 | "'no', " 507 | "'no' " 508 | " ); " 509 | ); 510 | 511 | query.prepare(InsertStr); 512 | qDebug()<username); 522 | } 523 | 524 | /** 525 | * 初始化tableWidget的布局 526 | */ 527 | void MainWindow::init_tableWidget() 528 | { 529 | //收件箱的布局-------------------------------------------------------------- 530 | 531 | model = new QStandardItemModel(); 532 | 533 | //添加表头信息 534 | model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("选"))); 535 | model->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("读"))); 536 | model->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("发件人"))); 537 | model->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("星"))); 538 | model->setHorizontalHeaderItem(4, new QStandardItem(QObject::tr("标题"))); 539 | model->setHorizontalHeaderItem(5, new QStandardItem(QObject::tr("内容"))); 540 | model->setHorizontalHeaderItem(6, new QStandardItem(QObject::tr("日期"))); 541 | 542 | //连接model和tableView 543 | ui->tableView->setModel(model); 544 | 545 | //设置列的宽度 546 | ui->tableView->setColumnWidth(0,10); 547 | ui->tableView->setColumnWidth(1,10); 548 | ui->tableView->setColumnWidth(2,130); 549 | ui->tableView->setColumnWidth(3,10); 550 | ui->tableView->setColumnWidth(4,150); 551 | ui->tableView->setColumnWidth(5,400); 552 | ui->tableView->setColumnWidth(6,150); 553 | 554 | //可隐藏grid 555 | ui->tableView->setShowGrid(false); 556 | 557 | //默认显示行头,也可以将隐藏 558 | ui->tableView->verticalHeader()->hide(); 559 | 560 | //设置选中时为整行选中 561 | ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); 562 | 563 | //设置表格的单元为只读属性,即不能编辑 564 | ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); 565 | //ui->tableView->setEditTriggers(QAbstractItemView::QAbstractItemView::CurrentChanged); 566 | 567 | 568 | 569 | //星际邮箱的布局-------------------------------------------------------------- 570 | 571 | model_star = new QStandardItemModel(); 572 | 573 | //添加表头信息 574 | model_star->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("选"))); 575 | model_star->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("读"))); 576 | model_star->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("发件人"))); 577 | model_star->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("星"))); 578 | model_star->setHorizontalHeaderItem(4, new QStandardItem(QObject::tr("标题"))); 579 | model_star->setHorizontalHeaderItem(5, new QStandardItem(QObject::tr("内容"))); 580 | model_star->setHorizontalHeaderItem(6, new QStandardItem(QObject::tr("日期"))); 581 | 582 | //连接model和tableView 583 | ui->tableView_star->setModel(model_star); 584 | 585 | //设置列的宽度 586 | ui->tableView_star->setColumnWidth(0,10); 587 | ui->tableView_star->setColumnWidth(1,10); 588 | ui->tableView_star->setColumnWidth(2,130); 589 | ui->tableView_star->setColumnWidth(3,10); 590 | ui->tableView_star->setColumnWidth(4,150); 591 | ui->tableView_star->setColumnWidth(5,400); 592 | ui->tableView_star->setColumnWidth(6,150); 593 | 594 | //可隐藏grid 595 | ui->tableView_star->setShowGrid(false); 596 | 597 | //默认显示行头,也可以将隐藏 598 | ui->tableView_star->verticalHeader()->hide(); 599 | 600 | //设置选中时为整行选中 601 | ui->tableView_star->setSelectionBehavior(QAbstractItemView::SelectRows); 602 | 603 | //设置表格的单元为只读属性,即不能编辑 604 | ui->tableView_star->setEditTriggers(QAbstractItemView::NoEditTriggers); 605 | 606 | 607 | 608 | //草稿邮箱的布局-------------------------------------------------------------- 609 | 610 | model_draft = new QStandardItemModel(); 611 | 612 | //添加表头信息 613 | model_draft->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("选"))); 614 | model_draft->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("读"))); 615 | model_draft->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("收件人"))); 616 | model_draft->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("星"))); 617 | model_draft->setHorizontalHeaderItem(4, new QStandardItem(QObject::tr("标题"))); 618 | model_draft->setHorizontalHeaderItem(5, new QStandardItem(QObject::tr("内容"))); 619 | model_draft->setHorizontalHeaderItem(6, new QStandardItem(QObject::tr("日期"))); 620 | 621 | //连接model和tableView 622 | ui->tableView_draft->setModel(model_draft); 623 | 624 | //设置列的宽度 625 | ui->tableView_draft->setColumnWidth(0,10); 626 | ui->tableView_draft->setColumnWidth(1,10); 627 | ui->tableView_draft->setColumnWidth(2,130); 628 | ui->tableView_draft->setColumnWidth(3,10); 629 | ui->tableView_draft->setColumnWidth(4,150); 630 | ui->tableView_draft->setColumnWidth(5,400); 631 | ui->tableView_draft->setColumnWidth(6,150); 632 | 633 | //可隐藏grid 634 | ui->tableView_draft->setShowGrid(false); 635 | 636 | //默认显示行头,也可以将隐藏 637 | ui->tableView_draft->verticalHeader()->hide(); 638 | 639 | //设置选中时为整行选中 640 | ui->tableView_draft->setSelectionBehavior(QAbstractItemView::SelectRows); 641 | 642 | //设置表格的单元为只读属性,即不能编辑 643 | ui->tableView_draft->setEditTriggers(QAbstractItemView::NoEditTriggers); 644 | 645 | 646 | //已发送的布局-------------------------------------------------------------- 647 | model_sended = new QStandardItemModel(); 648 | 649 | //添加表头信息 650 | model_sended->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("选"))); 651 | model_sended->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("读"))); 652 | model_sended->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("收件人"))); 653 | model_sended->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("星"))); 654 | model_sended->setHorizontalHeaderItem(4, new QStandardItem(QObject::tr("标题"))); 655 | model_sended->setHorizontalHeaderItem(5, new QStandardItem(QObject::tr("内容"))); 656 | model_sended->setHorizontalHeaderItem(6, new QStandardItem(QObject::tr("日期"))); 657 | 658 | //连接model和tableView 659 | ui->tableView_sended->setModel(model_sended); 660 | 661 | //设置列的宽度 662 | ui->tableView_sended->setColumnWidth(0,10); 663 | ui->tableView_sended->setColumnWidth(1,10); 664 | ui->tableView_sended->setColumnWidth(2,130); 665 | ui->tableView_sended->setColumnWidth(3,10); 666 | ui->tableView_sended->setColumnWidth(4,150); 667 | ui->tableView_sended->setColumnWidth(5,400); 668 | ui->tableView_sended->setColumnWidth(6,150); 669 | 670 | //可隐藏grid 671 | ui->tableView_sended->setShowGrid(false); 672 | 673 | //默认显示行头,也可以将隐藏 674 | ui->tableView_sended->verticalHeader()->hide(); 675 | 676 | //设置选中时为整行选中 677 | ui->tableView_sended->setSelectionBehavior(QAbstractItemView::SelectRows); 678 | 679 | //设置表格的单元为只读属性,即不能编辑 680 | ui->tableView_sended->setEditTriggers(QAbstractItemView::NoEditTriggers); 681 | 682 | 683 | 684 | //回收站的布局-------------------------------------------------------------- 685 | model_bin = new QStandardItemModel(); 686 | 687 | //添加表头信息 688 | model_bin->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("选"))); 689 | model_bin->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("读"))); 690 | model_bin->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("发件人"))); 691 | model_bin->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("星"))); 692 | model_bin->setHorizontalHeaderItem(4, new QStandardItem(QObject::tr("标题"))); 693 | model_bin->setHorizontalHeaderItem(5, new QStandardItem(QObject::tr("内容"))); 694 | model_bin->setHorizontalHeaderItem(6, new QStandardItem(QObject::tr("日期"))); 695 | 696 | //连接model和tableView 697 | ui->tableView_bin->setModel(model_bin); 698 | 699 | //设置列的宽度 700 | ui->tableView_bin->setColumnWidth(0,10); 701 | ui->tableView_bin->setColumnWidth(1,10); 702 | ui->tableView_bin->setColumnWidth(2,130); 703 | ui->tableView_bin->setColumnWidth(3,10); 704 | ui->tableView_bin->setColumnWidth(4,150); 705 | ui->tableView_bin->setColumnWidth(5,400); 706 | ui->tableView_bin->setColumnWidth(6,150); 707 | 708 | //可隐藏grid 709 | ui->tableView_bin->setShowGrid(false); 710 | 711 | //默认显示行头,也可以将隐藏 712 | ui->tableView_bin->verticalHeader()->hide(); 713 | 714 | //设置选中时为整行选中 715 | ui->tableView_bin->setSelectionBehavior(QAbstractItemView::SelectRows); 716 | 717 | //设置表格的单元为只读属性,即不能编辑 718 | ui->tableView_bin->setEditTriggers(QAbstractItemView::NoEditTriggers); 719 | 720 | 721 | //垃圾邮箱的布局-------------------------------------------------------------- 722 | model_rubbish = new QStandardItemModel(); 723 | 724 | //添加表头信息 725 | model_rubbish->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("选"))); 726 | model_rubbish->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("读"))); 727 | model_rubbish->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("发件人"))); 728 | model_rubbish->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("星"))); 729 | model_rubbish->setHorizontalHeaderItem(4, new QStandardItem(QObject::tr("标题"))); 730 | model_rubbish->setHorizontalHeaderItem(5, new QStandardItem(QObject::tr("内容"))); 731 | model_rubbish->setHorizontalHeaderItem(6, new QStandardItem(QObject::tr("日期"))); 732 | 733 | //连接model和tableView 734 | ui->tableView_rubbish->setModel(model_rubbish); 735 | 736 | //设置列的宽度 737 | ui->tableView_rubbish->setColumnWidth(0,10); 738 | ui->tableView_rubbish->setColumnWidth(1,10); 739 | ui->tableView_rubbish->setColumnWidth(2,130); 740 | ui->tableView_rubbish->setColumnWidth(3,10); 741 | ui->tableView_rubbish->setColumnWidth(4,150); 742 | ui->tableView_rubbish->setColumnWidth(5,400); 743 | ui->tableView_rubbish->setColumnWidth(6,150); 744 | 745 | //可隐藏grid 746 | ui->tableView_rubbish->setShowGrid(false); 747 | 748 | //默认显示行头,也可以将隐藏 749 | ui->tableView_rubbish->verticalHeader()->hide(); 750 | 751 | //设置选中时为整行选中 752 | ui->tableView_rubbish->setSelectionBehavior(QAbstractItemView::SelectRows); 753 | 754 | //设置表格的单元为只读属性,即不能编辑 755 | ui->tableView_rubbish->setEditTriggers(QAbstractItemView::NoEditTriggers); 756 | 757 | } 758 | 759 | 760 | /** 761 | * 展示收件箱的邮件信息 762 | * 763 | * 764 | * 星际邮箱 765 | * 766 | * 767 | * 草稿箱 768 | * 769 | * 770 | * 已发送邮件 771 | * 772 | * 773 | * 回收站 774 | * 775 | * 776 | * 垃圾站 777 | * 778 | */ 779 | void MainWindow::display(QString name) 780 | { 781 | QSqlQuery qry; 782 | 783 | //清空model 784 | model->clear(); 785 | model_bin->clear(); 786 | model_star->clear(); 787 | model_draft->clear(); 788 | model_sended->clear(); 789 | model_rubbish->clear(); 790 | 791 | //初始化布局 792 | init_tableWidget(); 793 | 794 | //显示收件箱-------------------------------------------------------------- 795 | 796 | qry.prepare( "select * from message where receiver = '"+name+"' and state = 'sended' " ); 797 | if( !qry.exec() ) 798 | qDebug() <<"display error"<setItem(i, 1, new QStandardItem(qry.value(8).toString())); 804 | model->setItem(i, 2, new QStandardItem(qry.value(1).toString())); 805 | model->setItem(i, 3, new QStandardItem(qry.value(9).toString())); 806 | model->setItem(i, 4, new QStandardItem(qry.value(3).toString())); 807 | 808 | QTextEdit te; 809 | te.setHtml(qry.value(4).toString()); 810 | model->setItem(i, 5, new QStandardItem(te.toPlainText())); 811 | //model->setItem(i, 5, new QStandardItem(qry.value(4).toString())); 812 | model->setItem(i, 6, new QStandardItem(qry.value(6).toString())); 813 | ui->tableView->setItemDelegate(new ButtonDelegate()); 814 | 815 | } 816 | 817 | 818 | //显示星际邮箱-------------------------------------------------------------- 819 | 820 | //qry.prepare( "select * from message where sender = '"+name+"' or receiver = '"+ name+" ' and important = 'yes'; " ); 821 | //qry.prepare( "select * from message where receiver = '"+ name+" ' " ); 822 | qry.prepare( "select * from message where receiver = '"+name+"' and important = 'yes' " ); 823 | if( !qry.exec() ) 824 | qDebug() <<"display star error"<setItem(i, 1, new QStandardItem(qry.value(8).toString())); 830 | model_star->setItem(i, 2, new QStandardItem(qry.value(1).toString())); 831 | model_star->setItem(i, 3, new QStandardItem(qry.value(9).toString())); 832 | model_star->setItem(i, 4, new QStandardItem(qry.value(3).toString())); 833 | QTextEdit te; 834 | te.setHtml(qry.value(4).toString()); 835 | model_star->setItem(i, 5, new QStandardItem(te.toPlainText())); 836 | //model->setItem(i, 5, new QStandardItem(qry.value(4).toString())); 837 | model_star->setItem(i, 6, new QStandardItem(qry.value(6).toString())); 838 | ui->tableView_star->setItemDelegate(new ButtonDelegate()); 839 | } 840 | 841 | 842 | 843 | //显示草稿邮箱-------------------------------------------------------------- 844 | 845 | qry.prepare( "select * from message where sender = '"+name+"' and state = 'draft'; " ); 846 | if( !qry.exec() ) 847 | qDebug() <<"display draft error"<setItem(i, 1, new QStandardItem(qry.value(8).toString())); 853 | model_draft->setItem(i, 2, new QStandardItem(qry.value(2).toString()));//收件人 854 | //model_draft->setItem(i, 3, new QStandardItem(qry.value(9).toString())); 855 | model_draft->setItem(i, 4, new QStandardItem(qry.value(3).toString())); 856 | QTextEdit te; 857 | te.setHtml(qry.value(4).toString()); 858 | model_draft->setItem(i, 5, new QStandardItem(te.toPlainText())); 859 | //model->setItem(i, 5, new QStandardItem(qry.value(4).toString())); 860 | model_draft->setItem(i, 6, new QStandardItem(qry.value(6).toString())); 861 | ui->tableView_draft->setItemDelegate(new ButtonDelegate()); 862 | 863 | } 864 | 865 | 866 | 867 | //显示已发件邮箱-------------------------------------------------------------- 868 | 869 | qry.prepare( "select * from message where sender = '"+name+"' and state = 'sended'; " ); 870 | if( !qry.exec() ) 871 | qDebug() <<"display sended error"<setItem(i, 1, new QStandardItem(qry.value(8).toString())); 877 | model_sended->setItem(i, 2, new QStandardItem(qry.value(2).toString()));//收件人 878 | //model_sended->setItem(i, 3, new QStandardItem(qry.value(9).toString())); 879 | model_sended->setItem(i, 4, new QStandardItem(qry.value(3).toString())); 880 | QTextEdit te; 881 | te.setHtml(qry.value(4).toString()); 882 | model_sended->setItem(i, 5, new QStandardItem(te.toPlainText())); 883 | //model->setItem(i, 5, new QStandardItem(qry.value(4).toString())); 884 | model_sended->setItem(i, 6, new QStandardItem(qry.value(6).toString())); 885 | ui->tableView_sended->setItemDelegate(new ButtonDelegate()); 886 | 887 | } 888 | 889 | 890 | 891 | //显示回收站邮箱-------------------------------------------------------------- 892 | 893 | qry.prepare( "select * from message where receiver = '"+name+"' and state = 'bin'; " ); 894 | if( !qry.exec() ) 895 | qDebug() <<"display bin error"<setItem(i, 1, new QStandardItem(qry.value(8).toString())); 901 | model_bin->setItem(i, 2, new QStandardItem(qry.value(1).toString())); 902 | model_bin->setItem(i, 3, new QStandardItem(qry.value(9).toString())); 903 | model_bin->setItem(i, 4, new QStandardItem(qry.value(3).toString())); 904 | QTextEdit te; 905 | te.setHtml(qry.value(4).toString()); 906 | model_bin->setItem(i, 5, new QStandardItem(te.toPlainText())); 907 | //model->setItem(i, 5, new QStandardItem(qry.value(4).toString())); 908 | model_bin->setItem(i, 6, new QStandardItem(qry.value(6).toString())); 909 | ui->tableView_bin->setItemDelegate(new ButtonDelegate()); 910 | 911 | } 912 | 913 | //显示垃圾邮箱-------------------------------------------------------------- 914 | 915 | qry.prepare( "select * from message where receiver = '"+name+"' and state = 'rubbish'; " ); 916 | if( !qry.exec() ) 917 | qDebug() <<"display rubbish error"<setItem(i, 1, new QStandardItem(qry.value(8).toString())); 923 | model_rubbish->setItem(i, 2, new QStandardItem(qry.value(1).toString())); 924 | model_rubbish->setItem(i, 3, new QStandardItem(qry.value(9).toString())); 925 | model_rubbish->setItem(i, 4, new QStandardItem(qry.value(3).toString())); 926 | QTextEdit te; 927 | te.setHtml(qry.value(4).toString()); 928 | model_rubbish->setItem(i, 5, new QStandardItem(te.toPlainText())); 929 | //model->setItem(i, 5, new QStandardItem(qry.value(4).toString())); 930 | model_rubbish->setItem(i, 6, new QStandardItem(qry.value(6).toString())); 931 | ui->tableView_rubbish->setItemDelegate(new ButtonDelegate()); 932 | } 933 | } 934 | 935 | void MainWindow::on_tableView_clicked(const QModelIndex &index) 936 | { 937 | qDebug()<data(QModelIndex(model->index( index.row(),2))).toString(); 943 | QString time = model->data(QModelIndex(model->index( index.row(),6))).toString(); 944 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 945 | id += ttime; 946 | qDebug()<username); 965 | return; 966 | } 967 | if(index.column()!=3&&index.column()!=0){//打开邮件,显示详细信息 968 | 969 | qry.prepare( "UPDATE message SET read = 'yes' WHERE id = '"+id+"' " );//设置已读 970 | if( !qry.exec() ) 971 | qDebug() << qry.lastError(); 972 | else 973 | qDebug( "Updated!" ); 974 | display(user->username); 975 | 976 | Receiver *r = new Receiver(id); 977 | r->show(); 978 | } 979 | } 980 | 981 | void MainWindow::on_tableView_star_clicked(const QModelIndex &index) 982 | { 983 | qDebug()<data(QModelIndex(model_star->index( index.row(),2))).toString(); 988 | QString time = model_star->data(QModelIndex(model_star->index( index.row(),6))).toString(); 989 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 990 | id += ttime; 991 | qDebug()<username); 1010 | return; 1011 | } 1012 | if(index.column()!=3&&index.column()!=0){//打开邮件,显示详细信息 1013 | 1014 | qry.prepare( "UPDATE message SET read = 'yes' WHERE id = '"+id+"' " );//设置已读 1015 | if( !qry.exec() ) 1016 | qDebug() << qry.lastError(); 1017 | else 1018 | qDebug( "Updated!" ); 1019 | display(user->username); 1020 | 1021 | Receiver *r = new Receiver(id); 1022 | r->show(); 1023 | } 1024 | 1025 | } 1026 | 1027 | void MainWindow::on_tableView_draft_clicked(const QModelIndex &index) 1028 | { 1029 | qDebug()<username; 1034 | QString time = model_draft->data(QModelIndex(model_draft->index( index.row(),6))).toString(); 1035 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1036 | id += ttime; 1037 | qDebug()<username); 1056 | return; 1057 | } 1058 | if(index.column()!=3&&index.column()!=0){//打开邮件,显示详细信息 1059 | 1060 | //***********************草稿箱,直接转到写邮件 1061 | 1062 | 1063 | //********************** 1064 | } 1065 | 1066 | } 1067 | 1068 | void MainWindow::on_tableView_sended_clicked(const QModelIndex &index) 1069 | { 1070 | qDebug()<username; 1075 | QString time = model_sended->data(QModelIndex(model_sended->index( index.row(),6))).toString(); 1076 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1077 | id += ttime; 1078 | qDebug()<username); 1098 | return; 1099 | } 1100 | if(index.column()!=3&&index.column()!=0){//打开邮件,显示详细信息 1101 | Receiver *r = new Receiver(id); 1102 | qDebug()<show(); 1104 | } 1105 | 1106 | } 1107 | 1108 | void MainWindow::on_tableView_bin_clicked(const QModelIndex &index) 1109 | { 1110 | qDebug()<data(QModelIndex(model_bin->index( index.row(),2))).toString(); 1115 | QString time = model_bin->data(QModelIndex(model_bin->index( index.row(),6))).toString(); 1116 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1117 | id += ttime; 1118 | qDebug()<username); 1137 | return; 1138 | } 1139 | if(index.column()!=3&&index.column()!=0){//打开邮件,显示详细信息 1140 | 1141 | qry.prepare( "UPDATE message SET read = 'yes' WHERE id = '"+id+"' " );//设置已读 1142 | if( !qry.exec() ) 1143 | qDebug() << qry.lastError(); 1144 | else 1145 | qDebug( "Updated!" ); 1146 | display(user->username); 1147 | 1148 | Receiver *r = new Receiver(id); 1149 | r->show(); 1150 | } 1151 | 1152 | } 1153 | 1154 | void MainWindow::on_tableView_rubbish_clicked(const QModelIndex &index) 1155 | { 1156 | qDebug()<data(QModelIndex(model_rubbish->index( index.row(),2))).toString(); 1161 | QString time = model_rubbish->data(QModelIndex(model_rubbish->index( index.row(),6))).toString(); 1162 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1163 | id += ttime; 1164 | qDebug()<username); 1183 | return; 1184 | } 1185 | if(index.column()!=3&&index.column()!=0){//打开邮件,显示详细信息 1186 | 1187 | qry.prepare( "UPDATE message SET read = 'yes' WHERE id = '"+id+"' " );//设置已读 1188 | if( !qry.exec() ) 1189 | qDebug() << qry.lastError(); 1190 | else 1191 | qDebug( "Updated!" ); 1192 | display(user->username); 1193 | 1194 | Receiver *r = new Receiver(id); 1195 | r->show(); 1196 | } 1197 | 1198 | } 1199 | 1200 | /** 1201 | * 收件箱,选择全部按钮 1202 | */ 1203 | void MainWindow::on_btn_receive_selectall_clicked() 1204 | { 1205 | for(int i=0;irowCount();i++){ 1206 | QVariant ok; 1207 | QModelIndex index= ui->tableView->model()->index(i,0, QModelIndex()); 1208 | 1209 | model->setData(index, true, Qt::DisplayRole); 1210 | } 1211 | } 1212 | 1213 | 1214 | /** 1215 | * 收件箱,全部已读按钮 1216 | */ 1217 | void MainWindow::on_pushButton_readall_clicked() 1218 | { 1219 | QSqlQuery qry; 1220 | qry.prepare( "update message set read = 'yes' where receiver = '"+user->username+"' and state = 'sended' " ); 1221 | if( !qry.exec() ) 1222 | qDebug() <<"read all error"<username); 1226 | } 1227 | 1228 | 1229 | /** 1230 | * 收件箱,删除按钮 1231 | */ 1232 | void MainWindow::on_btn_receive_delete_clicked() 1233 | { 1234 | for(int i=0;irowCount();i++){ 1235 | QVariant ok; 1236 | QModelIndex index= ui->tableView->model()->index(i,0, QModelIndex()); 1237 | 1238 | bool data = model->data(index, Qt::DisplayRole).toBool(); 1239 | 1240 | if(data==true){ 1241 | QString id = model->data(QModelIndex(model->index( index.row(),2))).toString(); 1242 | QString time = model->data(QModelIndex(model->index( index.row(),6))).toString(); 1243 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1244 | id += ttime; 1245 | 1246 | QSqlQuery qry; 1247 | qry.prepare( "update message set state = 'bin' where id = '"+id+"' " ); 1248 | if( !qry.exec() ) 1249 | qDebug() <<"delete error"<username); 1256 | } 1257 | 1258 | /** 1259 | * 收件箱,彻底删除按钮 1260 | */ 1261 | void MainWindow::on_btn_receive_deleteall_clicked() 1262 | { 1263 | for(int i=0;irowCount();i++){ 1264 | QVariant ok; 1265 | QModelIndex index= ui->tableView->model()->index(i,0, QModelIndex()); 1266 | 1267 | bool data = model->data(index, Qt::DisplayRole).toBool(); 1268 | 1269 | if(data==true){ 1270 | QString id = model->data(QModelIndex(model->index( index.row(),2))).toString(); 1271 | QString time = model->data(QModelIndex(model->index( index.row(),6))).toString(); 1272 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1273 | id += ttime; 1274 | 1275 | QSqlQuery qry; 1276 | qry.prepare( "delete from message where id = '"+id+"' " ); 1277 | if( !qry.exec() ) 1278 | qDebug() <<"delete error"<username); 1285 | } 1286 | 1287 | 1288 | /** 1289 | * 星标邮箱,选择全部 1290 | */ 1291 | void MainWindow::on_btn_star_selectall_clicked() 1292 | { 1293 | for(int i=0;irowCount();i++){ 1294 | QVariant ok; 1295 | QModelIndex index= ui->tableView_star->model()->index(i,0, QModelIndex()); 1296 | 1297 | model_star->setData(index, true, Qt::DisplayRole); 1298 | } 1299 | } 1300 | 1301 | 1302 | /** 1303 | * 星标邮箱,取消星标 1304 | */ 1305 | void MainWindow::on_btn_star_cancel_clicked() 1306 | { 1307 | for(int i=0;irowCount();i++){ 1308 | QVariant ok; 1309 | QModelIndex index= ui->tableView_star->model()->index(i,0, QModelIndex()); 1310 | 1311 | bool data = model_star->data(index, Qt::DisplayRole).toBool(); 1312 | 1313 | if(data==true){ 1314 | QString id = model_star->data(QModelIndex(model_star->index( index.row(),2))).toString(); 1315 | QString time = model_star->data(QModelIndex(model_star->index( index.row(),6))).toString(); 1316 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1317 | id += ttime; 1318 | QSqlQuery qry; 1319 | qry.prepare( "UPDATE message SET important = 'no' WHERE id = '"+id+"' " ); 1320 | if( !qry.exec() ) 1321 | qDebug() <<"update error"<username); 1328 | } 1329 | 1330 | /** 1331 | * 草稿箱,删除 1332 | */ 1333 | void MainWindow::on_btn_draft_delete_clicked() 1334 | { 1335 | for(int i=0;irowCount();i++){ 1336 | QVariant ok; 1337 | QModelIndex index= ui->tableView_draft->model()->index(i,0, QModelIndex()); 1338 | 1339 | bool data = model_draft->data(index, Qt::DisplayRole).toBool(); 1340 | 1341 | if(data==true){ 1342 | QString id = model_draft->data(QModelIndex(model_draft->index( index.row(),2))).toString(); 1343 | QString time = model_draft->data(QModelIndex(model_draft->index( index.row(),6))).toString(); 1344 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1345 | id += ttime; 1346 | 1347 | QSqlQuery qry; 1348 | qry.prepare( "delete from message where id = '"+id+"' " ); 1349 | if( !qry.exec() ) 1350 | qDebug() <<"delete error"<username); 1357 | } 1358 | 1359 | 1360 | /** 1361 | * 焦点Bar,字体变粗 1362 | */ 1363 | void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item) 1364 | { 1365 | QFont font; 1366 | font.setBold(true); 1367 | item->setFont(font); 1368 | // ui->listWidget->setSelectionModel(); 1369 | // ui->listWidget->setSelectionBehavior(); 1370 | } 1371 | 1372 | void MainWindow::on_btn_bin_selectAll_clicked() 1373 | { 1374 | for(int i=0;irowCount();i++){ 1375 | QVariant ok; 1376 | QModelIndex index= ui->tableView_bin->model()->index(i,0, QModelIndex()); 1377 | 1378 | model_bin->setData(index, true, Qt::DisplayRole); 1379 | } 1380 | } 1381 | 1382 | void MainWindow::on_btn_bin_recover_clicked() 1383 | { 1384 | for(int i=0;irowCount();i++){ 1385 | QVariant ok; 1386 | QModelIndex index= ui->tableView_bin->model()->index(i,0, QModelIndex()); 1387 | 1388 | bool data = model_bin->data(index, Qt::DisplayRole).toBool(); 1389 | 1390 | if(data==true){ 1391 | QString id = model_bin->data(QModelIndex(model_bin->index( index.row(),2))).toString(); 1392 | QString time = model_bin->data(QModelIndex(model_bin->index( index.row(),6))).toString(); 1393 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1394 | id += ttime; 1395 | QSqlQuery qry; 1396 | qry.prepare( "UPDATE message SET state = 'sended' WHERE id = '"+id+"' " ); 1397 | if( !qry.exec() ) 1398 | qDebug() <<"update error"<username); 1405 | } 1406 | 1407 | 1408 | 1409 | void MainWindow::on_btn_bin_delete_clicked() 1410 | { 1411 | for(int i=0;irowCount();i++){ 1412 | QVariant ok; 1413 | QModelIndex index= ui->tableView_bin->model()->index(i,0, QModelIndex()); 1414 | 1415 | bool data = model_bin->data(index, Qt::DisplayRole).toBool(); 1416 | 1417 | if(data==true){ 1418 | QString id = model_bin->data(QModelIndex(model_bin->index( index.row(),2))).toString(); 1419 | QString time = model_bin->data(QModelIndex(model_bin->index( index.row(),6))).toString(); 1420 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1421 | id += ttime; 1422 | 1423 | QSqlQuery qry; 1424 | qry.prepare( "delete from message where id = '"+id+"' " ); 1425 | if( !qry.exec() ) 1426 | qDebug() <<"delete error"<username); 1433 | } 1434 | 1435 | void MainWindow::on_btn_rubbish_selectAll_clicked() 1436 | { 1437 | for(int i=0;irowCount();i++){ 1438 | QVariant ok; 1439 | QModelIndex index= ui->tableView_rubbish->model()->index(i,0, QModelIndex()); 1440 | 1441 | model_rubbish->setData(index, true, Qt::DisplayRole); 1442 | } 1443 | } 1444 | 1445 | void MainWindow::on_btn_rubbish_recover_clicked() 1446 | { 1447 | for(int i=0;irowCount();i++){ 1448 | QVariant ok; 1449 | QModelIndex index= ui->tableView_rubbish->model()->index(i,0, QModelIndex()); 1450 | 1451 | bool data = model_rubbish->data(index, Qt::DisplayRole).toBool(); 1452 | 1453 | if(data==true){ 1454 | QString id = model_rubbish->data(QModelIndex(model_rubbish->index( index.row(),2))).toString(); 1455 | QString time = model_rubbish->data(QModelIndex(model_rubbish->index( index.row(),6))).toString(); 1456 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1457 | id += ttime; 1458 | QSqlQuery qry; 1459 | qry.prepare( "UPDATE message SET state = 'sended' WHERE id = '"+id+"' " ); 1460 | if( !qry.exec() ) 1461 | qDebug() <<"update error"<username); 1468 | } 1469 | 1470 | void MainWindow::on_btn_rubbish_delete_clicked() 1471 | { 1472 | for(int i=0;irowCount();i++){ 1473 | QVariant ok; 1474 | QModelIndex index= ui->tableView_rubbish->model()->index(i,0, QModelIndex()); 1475 | 1476 | bool data = model_rubbish->data(index, Qt::DisplayRole).toBool(); 1477 | 1478 | if(data==true){ 1479 | QString id = model_rubbish->data(QModelIndex(model_rubbish->index( index.row(),2))).toString(); 1480 | QString time = model_rubbish->data(QModelIndex(model_rubbish->index( index.row(),6))).toString(); 1481 | QString ttime = time.mid(0,4)+time.mid(5,2)+time.mid(8,2)+time.mid(11,2)+time.mid(14,2)+time.mid(17,2); 1482 | id += ttime; 1483 | 1484 | QSqlQuery qry; 1485 | qry.prepare( "delete from message where id = '"+id+"' " ); 1486 | if( !qry.exec() ) 1487 | qDebug() <<"delete error"<username); 1494 | } 1495 | 1496 | void MainWindow::on_changepic_clicked() 1497 | { 1498 | QString path = QFileDialog::getOpenFileName(this, tr("Open Image"),".",tr("Image Files(*.jpg *.png)")); 1499 | if(path.length()==0) 1500 | { 1501 | QMessageBox::information(NULL,tr("Error"),tr("You didn't select any files!")); 1502 | } 1503 | else { 1504 | ui->label_18->setStyleSheet("\nborder-image: url("+path+");"); 1505 | QSqlQuery qry; 1506 | QString update = "UPDATE user SET " 1507 | "icon = '"+path+"'" 1508 | "WHERE userid = '"+user->username+"' " ; 1509 | 1510 | qry.prepare(update); 1511 | if( !qry.exec() ) 1512 | qDebug() << qry.lastError(); 1513 | else{ 1514 | qDebug( "Updated!" ); 1515 | QMessageBox::information(this,"提示","修改信息成功!"); 1516 | 1517 | } 1518 | } 1519 | } 1520 | 1521 | void MainWindow::on_btn_person_back_clicked() 1522 | { 1523 | this->close(); 1524 | login *w = new login (); 1525 | w->show(); 1526 | } 1527 | 1528 | void MainWindow::on_btn_person_update_clicked() 1529 | { 1530 | personInfo *info = new personInfo(user->username); 1531 | info->show(); 1532 | } 1533 | 1534 | void MainWindow::on_toolButton_clicked() 1535 | { 1536 | QDateTime current_time= QDateTime::currentDateTime(); 1537 | QString ct = current_time.toString("yyyy.mm.dd hh:mm:ss ddd"); 1538 | qDebug()<textEdit->append(ct); 1540 | } 1541 | --------------------------------------------------------------------------------