2015年5月5日火曜日

Qt CreatorのtextEditにDrag & Dropでテキストファイルを開く

Qt CreatorのtextEditにDrag & Dropでテキストファイルを開く

Qt CreatorでText EditにDrop&Dropでテキストファイルを開きたいと思い、いろいろ調べたのですが、解決方法が見つからなかったのでstackoverflowで質問しました。

h2so5さんに親切に教えてもらいましたので、実際にやってみて細かいところを補足して紹介します。

Step1. Text Editクラスを拡張したMyTextEditクラスの作成

プロジェクトを右クリックし、新しいファイルを追加でC++ Classを作成します。 
Base classはなしでいいようです。
 enter image description here

Step2. ヘッダとCPPのコーディング

以下のようにヘッダとCPPをコーディングします。h2so5さんに教えてもらったものとは少し異なりますが、以下でも動いてます。

mytextedit.h

#ifndef MYTEXTEDIT_H
#define MYTEXTEDIT_H

#include <QTextEdit>

class MyTextEdit : public QTextEdit
{
public:
    MyTextEdit();
    void dragEnterEvent(QDragEnterEvent *e);
    void dropEvent(QDropEvent *e);
    MyTextEdit(QWidget *parent);
};

#endif // MYTEXTEDIT_H

mytextedit.cpp

#include "mytextedit.h"
#include <QDragEnterEvent>
#include <QMimeData>

MyTextEdit::MyTextEdit(QWidget *parent): QTextEdit(parent)
{
    setAcceptDrops(true);
}

void MyTextEdit::dragEnterEvent(QDragEnterEvent *e)
{
    if (!e->mimeData()->urls().empty())
        e->acceptProposedAction();
}

void MyTextEdit::dropEvent(QDropEvent *e)
{
    QFile file(e->mimeData()->urls().first().toLocalFile());
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    setPlainText(file.readAll());
    e->acceptProposedAction();
}

Step3. mainwindow.uiで作成したText EditをMyTextEditに格上げ

mainwindow.uiで右クリックし、格上げ先を指定をクリックし、
以下のようにして格上げする。

ベースクラス名: QTextEdit
格上げされたクラス名: MyTextEdit
ヘッダファイル: mytextedit.h
グローバルにインクルードする: チェックしない。

enter image description here

そうすると以下のようにtextEditがMyTextEditに格上げされます。

これでビルドすることでText EditにDrag & Dropでテキストファイルを開くことができました。

enter image description here

0 件のコメント :

コメントを投稿