(1)通过Qt creator 2.2 创建main window类型工程,可通过ui文件或者新建指针变量来创建菜单和工具栏。
(2)&F就是加速键和快捷键的指示方式。
(3)使用资源加载图标。
(4)工具栏。定义依存于this的新指针,并在工具栏上add widget即可。
1.2 中心部件通过ui可放置一个Text Edit控件,之后空白处点击CTRL+G可布置栅格布局。
拖入MDI部件,在ACTION管理器-新建上转到槽。编写回调函数文件。
#include1.3 Dock部件(停靠控件)#include QTextEdit *td = new QTextEdit(this); QMdiSubWindow *sub = ui->mdiArea->addSubWindow(td); sub->show();
直接拖入DOCK WIDGET即可。可在目录里在新建一个显示ACTION,编辑回调函数。
void MainWindow::on_action_DOCK_triggered()
{
ui->dockWidget->show();
}
1.4 状态栏
目前版本不支持向状态栏拖放部件,使用代码形式完成。
1.5 自定义菜单自定义菜单实现了向菜单中添加控件,需要定义并使用QWIDGETACTION的派生类。通过这个也可以学习下怎么定义新的类。
#includeclass QLineEdit; class myaction : public QWidgetAction { Q_OBJECT public: explicit myaction(QObject *parent = 0); protected: QWidget *createWidget(QWidget *parent); signals: void getText(const QString &string); public slots: void sendText(); private: QLineEdit *lineEdit; }; #endif // MYACTION_H
#include "myaction.h" #include#include #include myaction::myaction(QObject *parent) : QWidgetAction(parent) { lineEdit = new QLineEdit; connect(lineEdit,SIGNAL(returnPressed()),this,SLOT(sendText())); } QWidget *myaction::createWidget(QWidget *parent) { QSplitter *s = new QSplitter(parent); QLabel *l = new QLabel; l->setText("sss"); s->addWidget(l); s->addWidget(lineEdit); return s; } void myaction::sendText() { emit getText(lineEdit->text()); lineEdit->clear(); }
#ifndef MAINWINDOW_H #define MAINWINDOW_H #includenamespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_action_triggered(); void on_action_DOCK_triggered(); void setText(const QString &str); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
#include "myaction.h"
myaction *a = new myaction;
QMenu *editMenu = ui->menuBar->addMenu(tr("编辑"));
editMenu->addAction(a);
connect(a,SIGNAL(getText(QString)),this,SLOT(setText(QString)));
void MainWindow::setText(const QString &str){
ui->textEdit->setText(str);
}
值得注意的是,getText信号直接在sendText里用到了,信号和槽的机理还得继续研究。
举一反三,看看如何使用ui实现这个槽。新建一个mainwindow工程,在主界面拉入lineedit和textedit,在mainwindow头文件中声明槽,在cpp文件中实现以下,在构造函数中编辑connect函数(信号与槽编辑器貌似无法识别自定义的槽)
// IN H FILE
public slots:
void mySetText();
// IN ConSTRUCTOR
connect(ui->L1,SIGNAL(returnPressed()),this,SLOT(mySetText()));
// IN CPP FILE
void MainWindow::mySetText()
{
ui->textEdit->append(ui->L1->text());
}
注意:信号与槽的形参要对应,如果信号没有参数,槽也没有参数。
2 富文本处理 2.1 富文本文档结构// in constructor
QTextdocument *doc = ui->textEdit->document();
QTextframe *rootframe = doc->rootframe();
QTextframeFormat fmt;
fmt.setBorderBrush(Qt::red);
fmt.setBorder(3);
rootframe->setframeFormat(fmt);
QTextframeFormat fmt1;
fmt1.setBackground(Qt::gray);
fmt1.setBorderBrush(Qt::black);
fmt1.setBorder(2);
fmt1.setBorderStyle(QTextframeFormat::BorderStyle_Dashed);
QTextCursor cs = ui->textEdit->textCursor();
cs.insertframe(fmt1);
2.2 文本块
2.3 表格 列表 图片
2.4 查找功能
2.5 语法高亮和HTML
3 拖放操作
4 打印文档


