Qt之主窗口(一)



一、主窗口应用程序的建立

案例:----设计1个多文本编辑器,类似于word


1.1 设计界面
步骤:
1、建立1个Qt4 Gui应用程序,主窗口的基类选 QMainWindow
2、在ui界面上,增加菜单 File  Edit  Help
3、在ui界面下方的Action Edit里,建立QAction对象----new  open
4、将这些QAction对象,拖拽到工具栏上,就成立工具按钮;拖拽到File菜单里,就成了子菜单
5、给这些工具按钮添加 图片,方法如下:
在当前工程下建立目录 image
将png图片文件拷贝到image目录下
在项目上,点击右键----选新建----选Qt资源文件----文件名填写myImage
点击 Add----选Add Priex---修改前缀名为/image
点击Add----选Add files----点刷新----将image目录下的所以文件都选上----保持文件
    回到在ui界面下方的Action Edit里,修改这些QAction的icon,即选择合适的图片
    完成


1.2 设计ActinNew触发函数
步骤:
1、在cpp的构造函数中,将主界面的中心组件,设置为QMdiArea类的对象,
   mdiArea=new QMdiArea;
   setCentralWidget(mdiArea);
   注意://因为其它函数,在后面还要经常使用mdiArea,因此mdiArea已在h文件中,定义为成员变量,代码为:QMdiArea *mdiArea;
2、定义ActinNew,即新建文件动作触发的函数---注意必须在ui界面下的Action Edit中,点击动作右键----选Go to Slot
代码:
void Edit001MainWindow::on_actionNew_triggered()
{
    MyTextEdit *myTextEdit=new MyTextEdit;
    QMdiSubWindow *mdiSubWindow=mdiArea->addSubWindow(myTextEdit);
    mdiSubWindow->show(); //显示子窗口
    //myTextEdit->show(); //作用一样
    return;
}
注意:
1、MyTextEdit类是我们自定义的类,它继承自QTextEdit,因为我们需要在它的基础上,增加文件打开、文件保存等功能  
2、QMdiSubWindow类的对象   与  每个子窗口(或文件)  相对应,因此可以有多个2、QMdiSubWindow类的对象;而QMdiArea类的对象永远只有1个
3、利用mdiArea->addSubWindow(myTextEdit),可以建立多个子窗口

3、补充自定义类 MyTextEdit,基类填QTextEdit




1.3 设计ActinOpen触发函数
步骤:
1、定义ActionOpen,即打开文件动作 触发的函数---注意必须在ui界面下的Action Edit中,点击动作右键----选Go to Slot
void Edit001MainWindow::on_actionOpen_triggered()
{
    QString fileName=QFileDialog::getOpenFileName(this,"打开文件","/root/lianxi_qt");
    MyTextEdit *myTextEdit=new MyTextEdit;
    QMdiSubWindow *mdiSubWindow=mdiArea->addSubWindow(myTextEdit);
    myTextEdit->loadFile(fileName);
    mdiSubWindow->show();
}
注意:
1、使用了Qt标准对话框之QFileDialog
2、它的静态成员函数getOpenFileName,可以打开1个对话框,我们选择1个文件后,它的返回值就是该文件名,而且是带有路径的----很好
3、loadFile函数是我们准备自定义的成员函数(属于MyTextEdit类),它的功能是:根据文件名,打开1个文本文件,然后将文件内容全部读取出来;通过父类QTextEdit的成员函数setPlaneText,设置读取的内容为控件的text
2、在MyTextEdit类中,定义loadFile函数
代码:
void MyTextEdit::loadFile(QString fileName)
{


    QFile file(fileName); //建立1个QFile对象,让它和1个文件名关联----类似fopen函数(fp指针 和1个文件名关联)
    file.open(QFile::ReadOnly|QFile::Text); //执行成员函数open后,就可以 以只读方式、以文本方式 读取文件内容了
    QTextStream in(&file); //建立1个QTextStream文本流对象,它和1个QFile对象地址管理
    setPlainText(in.readAll()); //执行QTextStream文本流对象的readAll函数,可以返回流里的所有文本,类型为QString;   setPlainText函数是来设置控件的内容的
    return;
}




1.4 设计ActinSave触发函数
步骤:
1、定义ActionSave,即保存文件动作 触发的函数---注意必须在ui界面下的Action Edit中,点击动作右键----选Go to Slot
void Edit001MainWindow::on_actionSave_triggered()
{


    MyTextEdit *myTextEdit=(MyTextEdit *)(mdiArea->activeSubWindow()->widget());
    QString fileName=QFileDialog::getSaveFileName(this,"保存文件");//打开了1个标准对话框,是用来指定路径和命名文件的
    myTextEdit->saveFile(fileName); //注意,上面2句要写在1起,否则运行后 有段错误
    myTextEdit->show();
}


2、在MyTextEdit类中,定义saveFile函数

代码:
void MyTextEdit::saveFile(QString fileName)
{
    QFile file(fileName);
    file.open(QFile::WriteOnly|QFile::Text);
    QTextStream out(&file);
    out<<toPlainText();
    return;
}
注意:在h文件中,应有函数原型








   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章