QTday3
程序员文章站
2022-03-10 21:45:14
...
day3
记事本实验:
复习mainwindow主窗口程序,创建菜单工具状态,添加动作。
实验步骤:
新建QMainWindow主窗口项目,头文件中添加指针和函数声明。
private slots:
void newfile();//用于清空内容
private:
//void newfile();应写在private slots
QMenu *fileMenu;//菜单项“文件”
QMenu *editMenu;//菜单项“编辑”
void addMenus();//增加菜单栏
void addAction();//增加动作
void addToolBars();//增加工具栏
QToolBar *filetoolbar;//工具项
QToolBar *edittoolbar;
QAction *buildAct;
QAction *openAct;
QAction *findAct;
QTextEdit *textedit;//可编辑文本
mainwindow.cpp:
构造函数中,分配内存,初始化变量
textedit=new QTextEdit;
setCentralWidget(textedit);//将textedit设置为*窗口部件
resize(640,480);//设置窗口大小
addAction();//给动作Action指针分配内存
addMenus();//如果先建菜单项后建动作,就会出现野指针
addToolBars();
statusBar();//状态栏
statusBar()->showMessage("Ready",2);//提示Ready,2秒
逐一实现函数功能:
void MainWindow::addMenus()
{
//menuBar()第一次调用创建菜单栏,第二次调用返回这个菜单栏
fileMenu=menuBar()->addMenu("File");//增加文件菜单
fileMenu->addAction(buildAct);
fileMenu->addAction(openAct);
editMenu=menuBar()->addMenu("Edit");//
editMenu->addAction(findAct);
}
void MainWindow::addAction()
{
buildAct=new QAction("new",this);
connect(buildAct,SIGNAL(triggered()),this,SLOT(newfile()));
//connect(buildAct,SIGNAL(triggered()),this,SLOT(newfile()));
buildAct->setIcon(QIcon(":/new/pic/face"));//添加别名来使用face.png
openAct=new QAction("open",this);
openAct->setIcon(QIcon(":/new/pic/face"));
findAct=new QAction("find",this);
findAct->setIcon(QIcon(":/new/pic/face"));
}
void MainWindow::addToolBars()
{
filetoolbar=addToolBar("File");//工具栏的名字
filetoolbar->addAction(buildAct);
filetoolbar->addAction(openAct);
edittoolbar=addToolBar("Edit");
edittoolbar->addAction(findAct);
}
//槽函数
void MainWindow::newfile()
{
textedit->clear();
}
UI设计记事本
编辑ui文件,将*窗体设置为可编辑文本。
继续完善记事本
头文件中增加一个保存文件的动作,和两个槽函数(openfile和savefile)
QAction *saveAct;
源文件中把saveAct动作加到菜单里,也加到工具里
//void MainWindow::addMenus()函数里
fileMenu->addAction(saveAct);
//void MainWindow::addToolBars()函数里
filetoolbar->addAction(saveAct);
绑定openAct,给saveAct分配内存,设置图标,绑定saveAct
connect(openAct,SIGNAL(triggered()),this,SLOT(openfile()));
saveAct=new QAction("save");
saveAct->setIcon(QIcon(":/new/pic/face"));
connect(saveAct,SIGNAL(triggered()),this,SLOT(savefile()));
完成槽函数
void MainWindow::openfile()
{
//得到要打开的文件名字,模态对话框
QString fileName=QFileDialog::getOpenFileName(this,"opening","f:/myqt","Text(*.txt);;All(*.*)");
//
if (fileName.isEmpty())
{return ;}
QFile file(fileName);
file.open(QIODevice::ReadOnly|QIODevice::Text);
//绑定流
QTextStream in(&file);
//流中读取所有信息,然后在*窗口以纯文本显示
textedit->setPlainText(in.readAll());
}
void MainWindow::savefile()
{
//得到要打开的文件名字,模态对话框
QString fileName=QFileDialog::getSaveFileName(this,"opening","f:/myqt","Text(*.txt);;All(*.*)");
//
if (fileName.isEmpty())
{return ;}
QFile file(fileName);
file.open(QIODevice::WriteOnly|QIODevice::Text);
//绑定流
QTextStream out(&file);
//txt中文本转换为纯文本流向out
out<<textedit->toPlainText();
}
涉及到模态对话框和非模态对话框,参考网友的总结
>
对话框分为模态对话框和非模态对话框。
>
所谓模态对话框,就是会阻塞同一应用程序中其它窗口的输入。模态对话框很常见,比如“打开文件”功能。你可以尝试一下记事本的打开文件,当打开文件对话框出现时,我们是不能对除此对话框之外的窗口部分进行操作的。与此相反的是非模态对话框,例如查找对话框,我们可以在显示着查找对话框的同时,继续对记事本的内容进行编辑。
改.ui文件
小知识
插入图片:
QPixmap pixmap(QString::fromUtf8(":/new/prefix1/1"));//当前文件夹下面的图片
QPalette palette = this->palette();
palette.setBrush(backgroundRole(), QBrush(pixmap));
setPalette(palette);
下一篇: Qt5(一)编写Qt多窗口程序
推荐阅读