《Qt Creator快速入门》第2版 第5章 学习

1 主窗口框架

1.1 菜单栏和工具栏

(1)通过Qt creator 2.2 创建main window类型工程,可通过ui文件或者新建指针变量来创建菜单和工具栏。

(2)&F就是加速键和快捷键的指示方式。

(3)使用资源加载图标。

(4)工具栏。定义依存于this的新指针,并在工具栏上add widget即可。

1.2 中心部件

通过ui可放置一个Text Edit控件,之后空白处点击CTRL+G可布置栅格布局。

拖入MDI部件,在ACTION管理器-新建上转到槽。编写回调函数文件。

    #include <QTextEdit>
    #include <QMdiSubWindow>
    QTextEdit *td = new QTextEdit(this);
    QMdiSubWindow *sub = ui->mdiArea->addSubWindow(td);
    sub->show();

1.3 Dock部件(停靠控件)

直接拖入DOCK WIDGET即可。可在目录里在新建一个显示ACTION,编辑回调函数。

void MainWindow::on_action_DOCK_triggered()
{
    ui->dockWidget->show();
}

1.4 状态栏

目前版本不支持向状态栏拖放部件,使用代码形式完成。

1.5 自定义菜单

自定义菜单实现了向菜单中添加控件,需要定义并使用QWIDGETACTION的派生类。通过这个也可以学习下怎么定义新的类。

#include <QWidgetAction>

class 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 <QLineEdit>
#include <QSplitter>
#include <QLabel>

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

#include <QMainWindow>

namespace 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 打印文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Intimes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值