• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Qt - swój własny domyślny program do otwierania plików txt? Jak zrobić

0 głosów
186 wizyt
pytanie zadane 11 listopada 2017 w C i C++ przez Eliro Stary wyjadacz (10,480 p.)
#include "notepadwindow.h"
#include "ui_notepadwindow.h"
#include <QFileDialog>
#include <QComboBox>


NotepadWindow::NotepadWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::NotepadWindow)
{
    ui->setupUi(this);
    ui->actionBold->setCheckable(true);
    this->setCentralWidget(ui->textEdit); // Wyśrodkuj Pole tekstowe
    QComboBox* myComboBox = new QComboBox;
    ui->mainToolBar->addWidget(myComboBox);
    myComboBox->addItems({"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"});
    myComboBox->setCurrentIndex(29);
    ui->textEdit->setFontPointSize(myComboBox->currentIndex());
}



NotepadWindow::~NotepadWindow()
{
    delete ui;
}


void NotepadWindow::on_actionUndo_triggered()
{
    ui->textEdit->undo();
}

void NotepadWindow::on_actionRedo_triggered()
{
    ui->textEdit->redo();
}

void NotepadWindow::on_actionCut_triggered()
{
    ui->textEdit->cut();
}

void NotepadWindow::on_actionCopy_triggered()
{
    ui->textEdit->copy();
}

void NotepadWindow::on_actionPaste_triggered()
{
    ui->textEdit->paste();
}

void NotepadWindow::on_actionNew_triggered()
{
    mFilename = "";
    ui->textEdit->setPlainText("");

}

void NotepadWindow::on_actionOpen_triggered()
{
    QString file = QFileDialog::getOpenFileName(this, "open"); // Otwórz okienko wyboru plików
    if(!file.isEmpty())        // Jeśli plik nie jest pusty
    {
        QFile sFile(file);
        if(sFile.open(QFile::ReadOnly | QFile::Text)) // Jeśli plik jest otwarty
        {
            mFilename = file;
            QTextStream in(&sFile);
            in.setCodec("UTF-8"); // Ustaw kodowania znaków na UTF-8
            QString text = in.readAll();
            sFile.close();
            ui->textEdit->setPlainText(text);
        }
    }
}

void NotepadWindow::on_actionSave_triggered()
{
    QFile sFile(mFilename);
    if(sFile.open(QFile::WriteOnly | QFile::Text)) // Jeśli plik jest otwarty
    {
        QTextStream out(&sFile);
        out << ui->textEdit->toPlainText();
        out.setCodec("UTF-8"); // Ustaw kodowania znaków na UTF-8
        sFile.flush();
        sFile.close();

    }
}

void NotepadWindow::on_actionSave_as_triggered()
{
    QString file = QFileDialog::getSaveFileName(this, "");
    if(!file.isEmpty())
    {
        mFilename = file;
        on_actionSave_triggered();
    }
}

 

 

Czytałem ten temat: https://forum.pasja-informatyki.pl/160580/notatnik-pewien-problem

jednak niezbyt wiem jak tego użyć. Pomógłby ktoś?

komentarz 14 listopada 2017 przez Eliro Stary wyjadacz (10,480 p.)
main.cpp
#include "notepadwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
    NotepadWindow w;
    if(argc == 2)
    {
        QString textfile = argv[1];
        w.openfile(textfile);
    }

    w.show();
    return a.exec();

}

NotepadWindow.cpp
void NotepadWindow::openfile(QString textfile)
{
    QFile file(textfile);
    QTextStream in(&file);
    in.setCodec("UTF-8"); // Ustaw kodowania znaków na UTF-8
    QString text = in.readAll();
    ui->textEdit->setPlainText(text);
}

 

 

Takie coś wymyśliłem do tej pory i wciąż nie działa! :c

3 odpowiedzi

0 głosów
odpowiedź 12 listopada 2017 przez Bondrusiek Nałogowiec (49,160 p.)
wybrane 17 października 2018 przez Eliro
 
Najlepsza

Witam serdecznie,

trochę nie rozumiem pytania. Z tego co się orientuje to chcesz działać na argumentach linii poleceń.

Może to Ci pomoże:

#include <QCoreApplication>
#include <QDebug>
int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);

    QStringList arguments = qApp->arguments();

    for(int i = 0; i < arguments.size() ; i++)
    {
        qDebug() << i << " " << arguments.at(i);
    }


    app.exec();
}

QCoreApplication lub QApplication dołącza wskaźnik qApp który jest tak jakby this dla aplikacji

QStringList arguments = qApp->arguments(); ->pobiera argumenty

Pętla for przechodzi przez te argumenty i je wyświetla(qDebug())

1
komentarz 12 listopada 2017 przez Eliro Stary wyjadacz (10,480 p.)

trochę nie rozumiem pytania

W pytaniu chodziło o to, że mam swój notatnik w Qt i chcę, abym mógł ustawić go jako domyslne narzędzie otwierające pliki .txt, czyli "otwórz za pomocą".

0 głosów
odpowiedź 11 listopada 2017 przez obl Nałogowiec (45,940 p.)

Wejdź do pliku main.cpp tam funkcja main ma dwa argumenty:

int main(int argc, char *argv[])

musisz zmienić konstruktor klasy MainWindow tak, żeby przyjmowała te dwa argumenty i odpowiednio je obsłużyć. Ponieważ arg zawiera liczbę stringów zawartych w argv a pierwszy string to jest zawsze bezwzględna ścieżka do twojego programu, natomiast następne (opcjonalne) to to co w konsoli użytkownik wpisze, czyli jak np wpiszesz w konsoli:

moja_aplikacja.exe "ścieżka do pliku 1" "ścieżka do pliku 2"

to argv będzie przechowywało:

ścieżkę do mojej aplikacji
ścieżka do pliku 1
ścieżka do pliku 2

I w ten sposób system uruchamia program podając mu jako parametr ścieżkę do otwieranego pliku. Jeżeli tego nie obsłużyłeś to nie ma co się dziwić, że ci nie otwiera pliku.

komentarz 11 listopada 2017 przez Eliro Stary wyjadacz (10,480 p.)
Tak, wiem że nie działa i się nie dziwie, dlatego pytałem jak to obsłużyć :)
komentarz 12 listopada 2017 przez obl Nałogowiec (45,940 p.)

Musisz sprawdzić, czy zmienna argv zawiera informację o ścieżce dostępu do pliku i jeżeli tak to go otworzyć.

0 głosów
odpowiedź 11 listopada 2017 przez mokrowski VIP (102,940 p.)
Tu masz poprawny przykład obsługi argumentów linii poleceń aplikacji. https://stackoverflow.com/questions/2918353/obtaining-command-line-arguments-in-a-qt-application

Oprócz tego warto przeczytać dokumentację: http://doc.qt.io/qt-5/qapplication.html#details

Po instalacji aplikacji, wybierasz plik tekstowy prawym klawiszem myszy, opcja Otwórz w ( czy jakoś tak) i wskazujesz swój program. Nazwa otwieranego pliku trafia do linii komend programu w Qt.
komentarz 11 listopada 2017 przez Eliro Stary wyjadacz (10,480 p.)
Mało mi ten przykład mówi :/

Podobne pytania

0 głosów
1 odpowiedź 82 wizyt
0 głosów
2 odpowiedzi 254 wizyt
0 głosów
1 odpowiedź 88 wizyt
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

63,340 zapytań

109,600 odpowiedzi

228,959 komentarzy

44,178 pasjonatów

Przeglądających: 213
Pasjonatów: 13 Gości: 200

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...