テキストエディタはまだ完成していません。
まだ上書き保存などの機能は付いていません。保存の際には全て別名保存になります。
現在開いているテキストの保存も新たに同じ名前で保存することになります。
上書き保存などの機能は追って追加していきます。
キーボードショートカットも追って追加します。
テキストエディタを作りました。
うっからファイルを書き換えてしまわないように注意してください。
これから色々な機能を追加していこうと思っています。
簡単なメニューも使っています。
OS によってソースコードの一部を変更する方法も使っています。
texteditor プロジェクトはまだ完成していません。
まだ上書き保存などの機能は付いていません。保存の際には全て別名保存になります。
現在開いているテキストの保存も新たに同じ名前で保存することになります。
上書き保存などの機能は追って追加していきます。
キーボードショートカットも追って追加します。
texteditor という作業用ディレクトリを作ってください。
そして、そこに次の texteditor.cpp を記述して保存してください。
/*************************************
texteditor.cpp
copyright : vivacocoa.jp
last modified: Mar. 28, 2025
*************************************/
#include <QWidget>
#include <QApplication>
#include <QFileDialog>
#include <QMenu>
#include <QMenuBar>
#include <QMainWindow>
#include <iostream>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QTextStream>
#include <QFile>
#include <QDebug>
class TextEditor : public QMainWindow
{
public:
TextEditor (QWidget *parent = 0);
QString path;
//QTextEdit *edit = new QTextEdit (path, this);
QTextEdit edit = QTextEdit (path, this);
int space = 0;
#ifdef WIN64
#define space 30
#endif
protected:
void paintEvent (QPaintEvent *e);
private slots:
void OpenFile ();
void SaveFile ();
private:
void doDrawing ();
};
TextEditor::TextEditor (QWidget *parent)
: QMainWindow (parent)
{
auto *openfile = new QAction ("&Open file...", this);
auto *savefile = new QAction ("&Save file...", this);
auto *menu = menuBar ()->addMenu ("&File");
menu->addAction (openfile);
menu->addAction (savefile);
connect (openfile, &QAction::triggered, this, &TextEditor::OpenFile);
connect (savefile, &QAction::triggered, this, &TextEditor::SaveFile);
}
void TextEditor::OpenFile ()
{
path = QFileDialog::getOpenFileName (this, "", "", tr ("Files (*.txt *.cpp *.c *.pro)"));
if (path.isEmpty ())
{
std::cout << "canceled." << std::endl;
}
else
{
std::cout << path.toLocal8Bit().data() << std::endl;
QFile file (path);
QFileInfo fileInfo(path);
if (!file.open (QIODevice::ReadOnly))
{
QString err = "File("+ QFileInfo (file).fileName () + ") Open Error:" + file.errorString();
qDebug () << err;
return;
}
QTextStream instream (&file);
QString str = instream.readAll();
edit.setText (str);
file.close();
}
}
void TextEditor::SaveFile ()
{
path = QFileDialog::getSaveFileName (this, "", "", tr("File (*.txt *.cpp *.c *.pro)"));
if (path.isEmpty ())
{
std::cout << "canceled." << std::endl;
}
else
{
std::cout << path.toLocal8Bit().data () << std::endl;
QString err = "";
QFileInfo fileInfo(path);
QFile file (path);
if (!file.open (QIODevice::WriteOnly))
{
QString err = "File("+ fileInfo.fileName()+ ")Open Error:" + file.errorString();
qDebug () << err;
return;
}
QTextStream outstream (&file);
outstream << edit.toPlainText ();
file.close();
}
}
void TextEditor::paintEvent (QPaintEvent *e)
{
Q_UNUSED (e);
doDrawing ();
}
void TextEditor::doDrawing ()
{
auto size = this->size ();
auto w = size.width ();
auto h = size.height ();
edit.setGeometry (0, space, w, h - space);
}
int main (int argc, char **argv)
{
QApplication app (argc, argv);
TextEditor win;
win.resize (600,600);
win.setWindowTitle ("TextEditor");
win.show ();
return app.exec ();
}
texteditor ディレクトリで作業を続けます。
macOS Linux の場合
// プロジェクトを作ります。
qmake -project
// texteditor.pro というファイルができていると思います。
// texteditor.pro の末尾に次の行を追加してください。
QT += widgets
// Makefile を作ります。
qmake
// make します。
make
// コードにエラーがありましたら、コードを修正して再び make する作業を繰り返します。
// プロジェクトから作り直す必要はありません。
Windows の場合
// プロジェクトを作ります。
qmake -project
// texteditor.pro というファイルができていると思います。
// texteditor.pro の末尾に次の行を追加してください。
QT += widgets
// Makefile を作ります。
qmake
// nmake します。make じゃなく nmake です。
nmake
// コードにエラーがありましたら、コードを修正して再び nmake する作業を繰り返します。
// プロジェクトから作り直す必要はありません。
// Mac の場合は、texteditor ディレクトリに texteditor.app ができていると思います。
// ターミナルで実行するには次のようにコマンドします。
./texteditor.app/Contents/MacOS/texteditor
// Linux の場合は、texteditor という実行ファイルが出来上がっています。これをそのまま実行します。
./texteditor
// Windows の場合は、
// texteditor の中の release ディレクトリの中に texteditor.exe が出来上がっています。
Mac の場合、texteditor ディレクトリにできている texteditor.app (textedtor という名前になっています) をダブルクリックしても起動します。
他の場所、例えばデスクトップに持って行ってもダブルクリックで起動します。
Debian、Fedora、Kali の場合も、texteditor ディレクトリにできている texteditor をダブルクリックしても起動します。
他の場所、例えばデスクトップに持って行ってもダブルクリックで起動します。
Ubuntu、Mint はシステムに登録しないとダブルクリックでは起動できなかったと思います。
Windows の場合は、出来上がった texteditor.exe は、どこに持って行ってもダブルクリックで起動できます。
File メニューが表示されています。
Fedora
File メニューの Open file... メニューアイテムをクリックすると、オープンファイルダイアログが開きます。
Mac
File メニューの Save file... メニューアイテムをクリックすると、セーブファイルダイアログが開きます。
Mac