• 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
201 wizyt
pytanie zadane 11 listopada 2017 w C i C++ przez Eliro Stary wyjadacz (11,130 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 (11,130 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 Maniak (51,590 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 (11,130 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,920 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 (11,130 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,920 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 (110,360 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 (11,130 p.)
Mało mi ten przykład mówi :/

Podobne pytania

0 głosów
1 odpowiedź 94 wizyt
0 głosów
2 odpowiedzi 275 wizyt
0 głosów
1 odpowiedź 93 wizyt
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

66,325 zapytań

113,063 odpowiedzi

239,225 komentarzy

46,589 pasjonatów

Przeglądających: 285
Pasjonatów: 10 Gości: 275

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.

...