ui
像素感人
里面的保存 和打开文件都是用io流做的
代码放行使用
mainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QApplication>
#include <QTableWidget>
#include <QSplitter>
#include <QDialog>
#include <QFormLayout>
#include <QRadioButton>
#include <QComboBox>
#include <QSpinBox>
#include <QVBoxLayout>
#include <QFontDialog>
#include <QColorDialog>
#include <QStackedWidget>
#include <QQueue>
#include <QFile>
#include <QTextStream>
#include <QFileDialog>
#include <QMenu>
#include <QAction>
#include <QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void funSave();
void funOpen();
void funMove();
void funPlus();
private slots:
void on_pushButton_3_clicked();
void slotBtn();
void on_pushButton_4_clicked();
void on_pushButton_2_clicked();
void on_pushButton_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_8_clicked();
void on_action_1_triggered();
void on_action_2_triggered();
void on_tableWidget_cellDoubleClicked(int row, int column);
void slotAction1();
void slotAction2();
void slotAction3();
private:
Ui::MainWindow *ui;
QTableWidget *tablewidget;
QApplication *m;
QMenu *menu;
QAction *action1;
QAction *action2;
QAction *action3;
QPushButton *btn;
QVBoxLayout *vboxlayout;
QFormLayout *formlayout;
QLineEdit *line;
QRadioButton *radio;
QRadioButton *radio2;
QComboBox *combox;
QComboBox *combox2;
QSpinBox *spinbox;
QDialog *w;
QTableWidgetItem *it;
QTableWidgetItem *it1;
QTableWidgetItem *it2;
QTableWidgetItem *it3;
QTableWidgetItem *it4;
QTableWidgetItem *it5;
QTableWidgetItem *it6;
QStringList *stringlist;
QString str;
QStackedWidget *stackwidget;
QQueue<QTableWidgetItem>*queeue; // 存储学号的容器
QQueue<QTableWidgetItem>*queeue2; // 存储姓名的容器
int row; // 行
int col; // 列
int id; // 学号
};
#endif // MAINWINDOW_H
mainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
,row(0)
,col(0)
,id(1)
,queeue(new QQueue<QTableWidgetItem>)
,queeue2(new QQueue<QTableWidgetItem>)
,stackwidget(new QStackedWidget)
,stringlist(new QStringList)
{
ui->setupUi(this);
ui->tableWidget->setRowCount(999);
ui->tableWidget->setColumnCount(6);
QStringList ss;
ss<<tr("学号")<<tr("姓名")<<tr("年龄")<<tr("性别")<<tr("所在院系")<<tr("入学时间");
ui->tableWidget->setHorizontalHeaderLabels(ss);
ui->centralwidget->setLayout(ui->horizontalLayout);
menu = menuBar()->addMenu(tr("工具"));
action1 = menu->addAction(tr("添加"),nullptr,nullptr,QKeySequence("Ctrl+F"));
action2 = menu->addAction(tr("删除"),nullptr,nullptr,QKeySequence("Ctrl+D"));
action3 = menu->addAction(tr("退出"),nullptr,nullptr,QKeySequence("Esc"));
connect(action1,SIGNAL(triggered()),this,SLOT(slotAction1()));
connect(action2,SIGNAL(triggered()),this,SLOT(slotAction2()));
connect(action3,SIGNAL(triggered()),this,SLOT(slotAction3()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::funSave()
{
QFile file("../TestStu/test.txt");
if(!file.open(QIODevice::WriteOnly|QIODevice::Append)){ // QIODevice io流类
qDebug()<<"打开文件失败";
return;
}
QTextStream out(&file);
out<<str;
// str="";
file.close();
}
void MainWindow::funOpen()
{
QString is;
QString iss;
QString s = QFileDialog::getOpenFileName(
this,
"打开文件",
"/",
"Text 只查找(*.txt);;C++ 只查找(*.cpp);;C 只查找(*.h)" // 这里是用. 别搞错成,了
);
qDebug() << s;
QFile file(s);
if(!file.open(QIODevice::ReadWrite)) // QIODevice io流类
qDebug()<<"打开文件失败";
QTextStream in(&file);
iss = in.readLine(); // 读取一行
is = in.readAll(); // 读取所有
//in>>is; // 流文件只能流一段遇到空格就不流, 我也想过用while来流但是判断不想c++啊
if(!is.isEmpty()){
ui->textEdit->setText(iss+is);
}
file.close();
}
void MainWindow::funMove()
{
if(ui->tableWidget->currentItem()){
int n =0,m=0;
int index = ui->tableWidget->currentRow();
QTableWidgetItem *iter = ui->tableWidget->item(index,0);
QString s = str.left(4); // 拿到左边的4个字符 也就是学号
int size = str.size();
for(int i = 0;i<=str.length();i++,n++){
if(str[i] == "\n"){
if(s == iter->text()){
str.remove(m,i);
}
else {
m = i+1;
s = str.mid(m,4);
}
}
}
if(str == "\n")
str = "";
qDebug()<<str;
queeue->removeAt(ui->tableWidget->currentRow());
queeue2->removeAt(ui->tableWidget->currentRow());
ui->tableWidget->removeRow(ui->tableWidget->currentRow());
row--;
id--;
}
}
void MainWindow::funPlus()
{
w = new QDialog;
vboxlayout = new QVBoxLayout;
formlayout = new QFormLayout;
line = new QLineEdit(w);
radio = new QRadioButton(w);
radio2 = new QRadioButton(w);
combox = new QComboBox(w);
combox2 = new QComboBox(w);
spinbox = new QSpinBox(w);
btn = new QPushButton(tr("确认"),w);
line->setMaxLength(4);
radio->setText(tr("男"));
radio2->setText(tr("女"));
radio->setChecked(true);
spinbox->setValue(1);
spinbox->setMinimum(0);
spinbox->setMaximum(100);
combox->addItem(tr("信工系"));
combox->addItem(tr("旅游系"));
combox->addItem(tr("建筑系"));
combox->addItem(tr("艺术系"));
combox->addItem(tr("机械系"));
combox->addItem(tr("其它"));
combox2->addItem(tr("17"));
combox2->addItem(tr("18"));
combox2->addItem(tr("19"));
combox2->addItem(tr("20"));
formlayout->addRow(tr("姓名:"),line);
formlayout->addRow(tr("年龄:"),spinbox);
formlayout->addRow(radio,radio2);
formlayout->addRow(tr("所在院系:"),combox);
formlayout->addRow(tr("入校时间"),combox2);
vboxlayout->addLayout(formlayout);
vboxlayout->addWidget(btn);
w->setLayout(vboxlayout);
connect(btn,SIGNAL(clicked()),this,SLOT(slotBtn()));
w->show();
}
void MainWindow::on_pushButton_3_clicked()
{
funPlus();
}
void MainWindow::slotBtn() // 判断对话框 输入是否合法
{
bool isbox = true;
QString name = line->text();
for(auto i = name.begin();i!=name.end();i++){
if(*i>='0' && *i<='9')
isbox=false;
else if(*i>='A' && *i<='z')
isbox=false;
else if(*i==' ')
isbox=false;
}
if(name.size()<2)
isbox = false;
else if(spinbox->value()<=0 ||spinbox->value()>100)
isbox = false;
if(isbox){
QString s = combox2->currentText();
s+="0"+s.number(id);
QString spin = QString::number(spinbox->value());
id++;
ui->tableWidget->setItem(row,col,it = new QTableWidgetItem(s)); // 学号
str+=it->text()+" ";
stringlist->append(it->text());
queeue->append(*it);
// stackwidget->addWidget(ui->tableWidget);
col++;
ui->tableWidget->setItem(row,col,it1 = new QTableWidgetItem(line->text())); // 姓名
str+=it1->text()+" ";
queeue2->append(*it1);
col++;
ui->tableWidget->setItem(row,col,it2 = new QTableWidgetItem(spin)); // 年龄
str+=it2->text()+" ";
stringlist->append(it2->text());
col++;
if(radio->isChecked()){
ui->tableWidget->setItem(row,col,it3 = new QTableWidgetItem(tr("男")));
str+=it3->text()+" ";
stringlist->append(it3->text());
}
else {
ui->tableWidget->setItem(row,col,it4 = new QTableWidgetItem(tr("女")));
str+=it4->text()+" ";
stringlist->append(it4->text());
}
col++;
ui->tableWidget->setItem(row,col,it5 = new QTableWidgetItem(combox->currentText())); // 院系
str+=it5->text()+" ";
stringlist->append(it5->text());
col++;
ui->tableWidget->setItem(row,col,it6 = new QTableWidgetItem(combox2->currentText()+"/9/1")); // 入校时间
str+=it6->text()+"\n";
stringlist->append(it6->text());
row++;
col=0;
w->close();
}
}
void MainWindow::on_pushButton_4_clicked() // 删除学生
{
funMove();
}
void MainWindow::on_pushButton_2_clicked() // 学号查找
{
QString s = ui->lineEdit_2->text();
int y=0,x = 0;
if(ui->pushButton_2->isChecked()){
for(auto i=queeue->begin();i!=queeue->end();i++){
if(i->text() == s){
i->setForeground(QBrush(Qt::red));
i->setBackground(Qt::yellow);
ui->tableWidget->setItem(y,x,new QTableWidgetItem(*i));
}
y++;
}
}
else {
for(auto i=queeue->begin();i!=queeue->end();i++){
if(i->text() == s){
i->setForeground(QBrush(Qt::black));
i->setBackground(Qt::white);
ui->tableWidget->setItem(y,x,new QTableWidgetItem(*i));
}
y++;
}
}
}
void MainWindow::on_pushButton_clicked() //姓名查找
{
QString s = ui->lineEdit->text();
int y=0,x = 1;
if(ui->pushButton->isChecked()){
for(auto i=queeue2->begin();i!=queeue2->end();i++){
if(i->text() == s){
i->setForeground(QBrush(Qt::red));
i->setBackground(Qt::yellow);
ui->tableWidget->setItem(y,x,new QTableWidgetItem(*i));
}
y++;
}
}
else {
for(auto i=queeue2->begin();i!=queeue2->end();i++){
if(i->text() == s){
i->setForeground(QBrush(Qt::black));
i->setBackground(Qt::white);
ui->tableWidget->setItem(y,x,new QTableWidgetItem(*i));
}
y++;
}
}
}
void MainWindow::on_pushButton_5_clicked() // 设置文字
{
QFontDialog *fontdialog = new QFontDialog(this);
if(QDialog::Accepted == fontdialog->exec())
ui->tableWidget->setFont(fontdialog->currentFont());
}
void MainWindow::on_pushButton_6_clicked() // 排序
{
if(ui->pushButton_6->isChecked()){
ui->pushButton->setDisabled(true);
ui->pushButton_2->setDisabled(true);
ui->tableWidget->sortByColumn(2, Qt::DescendingOrder); // 升序
}
else {
ui->pushButton->setDisabled(false);
ui->pushButton_2->setDisabled(false);
ui->tableWidget->sortByColumn(2,Qt::AscendingOrder); // 降序
}
}
void MainWindow::on_pushButton_7_clicked() // 按钮保存
{
funSave();
}
void MainWindow::on_pushButton_8_clicked() // 按钮打开
{
funOpen();
}
void MainWindow::on_action_1_triggered() // 菜单保存文件
{
funSave();
}
void MainWindow::on_action_2_triggered() // 菜单打开文件
{
funOpen();
}
void MainWindow::slotAction1() // 添加
{
funPlus();
}
void MainWindow::slotAction2() // 删除
{
funMove();
}
void MainWindow::slotAction3() // 退出程序
{
m->quit();
}
void MainWindow::on_tableWidget_cellDoubleClicked(int row, int column)
{
menu->exec(cursor().pos()); // 双击打开菜单栏
}
main.cpp
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}