现在窗体上绘制好自己的记事本界面,然后再头文件中定义几个需要的槽和函数。我解决了几个小问题,就是再添加菜单的图标时,明明添加了图标,却无法显示,后来在每个菜单项的IconVisibalMenu选项构上。然后在使用copy和paste()函数时出现了错误,不知道怎么调用到这个函数。革命尚未成功,同志仍需努力。
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setCentralWidget(this->ui->textEdit);
// this->setStyleSheet(tr("background:url(:/images/Jellyfish.jpg)"));
// this->setStyleSheet(tr("background:rgb(102,102,0,255)"));//这一句会将设置的背景图像覆盖掉
//对于菜单栏对应的是Action,背景和快捷键都是可以设置的
// ui->actionNew->setIcon(QIcon(QPixmap("./images/new.png")));
// ui->actionOpen->setIcon(QIcon(QPixmap("./open.png")));
// ui->action_Save->setIcon(QIcon(QPixmap("./images/save.png")));
connect(ui->actionNew,SIGNAL(triggered()),this,SLOT(newslot()));
connect(ui->actionOpen,SIGNAL(triggered()),this,SLOT(openslot()));
connect(ui->action_Save,SIGNAL(triggered()),this,SLOT(saveslot()));
connect(ui->action_Save_As,SIGNAL(triggered()),this,SLOT(saveasslot()));
connect(ui->action_EXIT,SIGNAL(triggered()),this,SLOT(close()));
connect(ui->textEdit,SIGNAL(copyAvailable(bool)),ui->action_Copy,SLOT(setEnabled(bool)));
connect(ui->action_Copy,SIGNAL(triggered()),this,SLOT(copy()));//系统自带的函数
connect(ui->action_Cut,SIGNAL(triggered()),this,SLOT(cut()));
ui->action_Copy->setEnabled(false);
ui->action_Cut->setEnabled(false);
}
void MainWindow::closeEvent(QCloseEvent *event)
{
if(ui->textEdit->document()->isModified()==true )
{
QMessageBox::StandardButton ret=QMessageBox::warning(this,"save files","document has been modifeld!",QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel);
if(ret==QMessageBox::Save)
saveslot();//保存对应的函数
else if(ret==QMessageBox::Discard)//如果是取消则什么都不做
;
else
{
event->ignore();
return;
}
}
event->accept();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::saveslot()
{
if(ui->textEdit->document()->isModified())
{
if(currentname.isEmpty())
{
saveasslot();
}
else
{
QFile file(currentname);
if(file.open(QIODevice::WriteOnly))
{
QDataStream out(&file);
out<<ui->textEdit->toPlainText();
}
else
qDebug()<<"wrong here ";
}
ui->textEdit->document()->setModified(false);
}
}
void MainWindow::newslot()
{
if(ui->textEdit->document()->isModified())
{
QMessageBox::StandardButton ret= QMessageBox::warning(this,"save files","document has been modified",QMessageBox::Save |QMessageBox::Discard|QMessageBox::Cancel);
if(ret==QMessageBox::Save)
saveslot();
else if(ret==QMessageBox::Discard)
;
else
return;
}
currentname="";
ui->textEdit->setPlainText("");//新建一个文件时,将文本框恢复到空字符串
}
void MainWindow::openslot()//打开文件
{
QString filename=QFileDialog::getOpenFileName(this,"open files","","all files(*)");
if(filename.isEmpty())//r如果文件为空则什么都不做
return;
else
{
currentname=filename;//将文件名保存位现在文件名
QFile file(filename);
if(file.open(QIODevice::ReadOnly))//如果能一2只读方式打开文件
{
//这里一开始用的QIOStream,一样的代码却不成功
//QTextStream类提供了使用QIODevice读写文本的基本功能。
// 文本流类的功能界面和标准的C++的iostream类非常相似。
//iostream和QTextStream的不同点是我们的流操作在一个很容易被继承的QIODevice上,
//而iostream只能操作一个不能被继承的FILE *指针。
QTextStream in(&file);
ui->textEdit->setPlainText(in.readAll());//将文本编辑框的值设置为字符串的值
}
else
qDebug()<<"lloha";
}
}
void MainWindow::saveasslot()
{
QString filename=QFileDialog::getSaveFileName(this,"save file","","all files(*)");
if(filename.isEmpty())
return;
else
{
QFile file(filename);
currentname=filename;
if(file.open(QIODevice::WriteOnly))
{
QDataStream out(&file);
out<<ui->textEdit->toPlainText();
}
else
{
qDebug()<<"open failed";
}
ui->textEdit->document()->setModified(false);
}
}
void MainWindow::help()
{
}
void MainWindow::helpqt()
{
}