Qt CreatorでText EditにDrop&Dropでテキストファイルを開きたいと思い、いろいろ調べたのですが、解決方法が見つからなかったのでstackoverflowで質問しました。
h2so5さんに親切に教えてもらいましたので、実際にやってみて細かいところを補足して紹介します。
Step1. Text Editクラスを拡張したMyTextEditクラスの作成
プロジェクトを右クリックし、新しいファイルを追加でC++ Classを作成します。
Base classはなしでいいようです。
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
グローバルにインクルードする: チェックしない。
そうすると以下のようにtextEditがMyTextEditに格上げされます。
これでビルドすることでText EditにDrag & Dropでテキストファイルを開くことができました。
0 件のコメント :
コメントを投稿