• 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ć

VPS Starter Arubacloud
0 głosów
714 wizyt
pytanie zadane 11 listopada 2017 w C i C++ przez Eliro Stary wyjadacz (12,160 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 (12,160 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 (61,370 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 (12,160 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 Maniak (51,280 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 (12,160 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 Maniak (51,280 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 Mędrzec (155,460 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 (12,160 p.)
Mało mi ten przykład mówi :/

Podobne pytania

0 głosów
1 odpowiedź 539 wizyt
0 głosów
2 odpowiedzi 749 wizyt
pytanie zadane 17 sierpnia 2016 w C i C++ przez Hepsko Początkujący (260 p.)
0 głosów
2 odpowiedzi 481 wizyt
pytanie zadane 28 stycznia 2021 w C i C++ przez paluch Nowicjusz (120 p.)

92,452 zapytań

141,262 odpowiedzi

319,080 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...