Continuando o programa da aula anterior, comente no método de listar, a parte que lista arquivos, e deixe apenas a que lista pastas, dessa forma:
void MainWindow::on_cbUnid_currentTextChanged(const QString &arg1) {
ui->lstDir->clear();
ui->lstDir->addItem(arg1);
QDir conteudo(arg1);
foreach(QFileInfo qfi, conteudo.entryInfoList()) {
if(qfi.isDir()) {
ui->lstDir->addItem("Pasta: " + qfi.absoluteFilePath());
}
}
}
Também adicionamaos um método que adiciona por padrão a unidade como primeiro item.
Adicione o slot clicked no botão adicionar, e coloque esse código:
void MainWindow::on_btnAdd_clicked() {
local = ui->lstDir->currentItem()->text();
QString nome = ui->txtDir->text().trimmed();
QDir novodir(local + "/" + nome);
if(novodir.exists()) {
QMessageBox::warning(this, "Pasta", "Diretório " + nome + " já Existe!"); // Inclua QMessageBox
}
else {
novodir.mkdir(local + "/" + nome);
ui->lstDir->clear();
ui->lstDir->addItem(ui->cbUnid->currentText());
QDir conteudo(ui->cbUnid->currentText());
foreach(QFileInfo qfi, conteudo.entryInfoList()) {
if(qfi.isDir()) {
ui->lstDir->addItem("Pasta: " + qfi.absoluteFilePath());
}
}
}
ui->txtDir->clear();
}
E para remover:
void MainWindow::on_btnRem_clicked() {
local = ui->lstDir->currentItem()->text();
QString nome = ui->txtDir->text().trimmed();
QDir excldir(local + "/" + nome);
if(!excldir.exists()) {
QMessageBox::warning(this, "Pasta", "Diretório não Encontrado!"); // Inclua QMessageBox
}
else {
excldir.rmdir(local + "/" + nome);
ui->lstDir->clear();
ui->lstDir->addItem(ui->cbUnid->currentText());
QDir conteudo(ui->cbUnid->currentText());
foreach(QFileInfo qfi, conteudo.entryInfoList()) {
if(qfi.isDir()) {
ui->lstDir->addItem("Pasta: " + qfi.absoluteFilePath());
}
}
}
}
PS: Clique na unidade ou pasta desejada dentro do List Widget antes de criar a pasta.
Podemos utilizar comandos da linha de comando do sistema no QT, dessa forma (crie um formulário e coloque isso no slot clicked do botão):
QProcess cons; // Inclua QProcess
cons.start("cmd.exe");
cons.write("echo Exemplo de Uso de linhas de comando no QT>>%userprofile%\\Desktop\\teste2.txt\n\r"); // Não esqueça do \n\r no final do write
cons.write("exit\n\r");
cons.waitForFinished();
cons.close();
Claro que isso acima foi mais pra mostrarmos o uso do método, porque para criar e ler arquivos usamos outro recurso no QT.
PS: Comandos de diretórios não funcionam aí. Para navegar por diretórios, no entanto, use os métodos de QDir setCurrent, homePath, etc., explicado anteriormente.
Em sistemas Unix basta usar o comando assim:
QProcess cons; // Inclua QProcess
cons.start("bash");
cons.write("echo \"Exemplo de Uso de linhas de comando no QT\">>~/teste2.txt\n\r"); // Não esqueça do \n\r no final do write
cons.write("exit\n\r");
cons.waitForFinished();
cons.close();
Veja que onde está bash pode ser passado outro shell do sistema, e no último parâmetro passamos o comando desejado.
PS: Podemos usar startDetached()
para rodar as linhas de comando no console do QT.
Crie um novo projeto, e na pasta do projeto, crie uma pasta com o nome imagens e coloque a imagem do ícone nele (pode ser em vários formatos, mas é preferível usar ICO).
No projeto, vá em add new, Qt e Qt Resource File, e coloque o nome ArquivoDeRecursos.
No arquivosderecursos.qtc, vá em add prefix, e coloque um caminho de pasta, como /img, e aí em add files, adicione a imagem.
No frame, vá em Window Icon, clique em Choose Resource, procure e adicione o ícone ao nosso programa.
Para colocar o ícone global (aparecer tanto no executável quanto na barra de tarefas e etc., coloque a imagem no formato ICO no mesmo diretório dos códigos fontes ou dentro de uma pasta. E crie um arquivo com extensão rc (como arquivo.rc) e coloque esse código:
IDI_ICON1 ICON DISCARDABLE "imagens/nomedoicone.ico"
E no arquivo .pro adicione a linha com o nome do arquivo rc, por exemplo:
RC_FILE = arquivo.rc
Basicamente, esse daqui é um exemplo de como criar um hash de senhas para qt:
QString senha = ui->txtSenha->text().trimmed();
QString encripta = QString(QCryptographicHash::hash(senha.toStdString().c_str(), QCryptographicHash::Md5).toHex()); // Inclua QCryptographicHash
QMessageBox::information(this, "Hash", "Hash: " + encripta); // Inclua QMessageBox
Além da Hash MD5, podemos usar SHA-1 e SHA-256, entre outras, apenas mudando a constante da classe QCryptographicHash, dessa forma:
Constantes de Hash |
---|
QCryptographicHash::Md5 |
QCryptographicHash::Sha1 |
QCryptographicHash::Sha256 |
Abra um novo projeto, e coloque um plain text edit e dois push buttons, organize os botões num layout horizontal e tudo num vertical, e aumente o tamanho de tudo para ocupar todo o frame.
Altere os textos dos botões para gravar e ler no arquivo, e altere também os names dele.
Crie na pasta do projeto uma pasta e um arquivo de texto, e duas variáveis globais com o caminho desse arquivo, assim:
QString MainWindow::local = "C:/Meus Projetos/C++ Qt/TrabalhandoComArquivos/files/"; // Não esqueça da barra no final
QString MainWindow::nome = "arquivo.txt"; // Declare as duas variáveis estáticas na classe no arquivo mainwindow.h
No slot clicked do botão gravar, adicione esse código:
void MainWindow::on_btnGrav_clicked() {
QFile arquivo(local + nome); // Inclua QFile
if(!arquivo.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, "ERRO", "Erro ao Abrir o Arquivo!"); // Inclua QMessageBox
}
QTextStream saida(&arquivo); // Inclua QTextStream
QString texto = ui->plArq->toPlainText();
saida << texto;
arquivo.flush();
arquivo.close();
ui->plArq->clear();
}
No slot clicked do botão ler, coloque esse código:
void MainWindow::on_btnLer_clicked() {
QFile arquivo(local + nome); // Inclua QFile
if(!arquivo.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, "ERRO", "Erro ao Abrir o Arquivo!"); // Inclua QMessageBox
}
QTextStream entrada(&arquivo); // Inclua QTextStream
QString texto = entrada.readAll();
ui->plArq->setPlainText(texto);
arquivo.close();
}
No projeto anterior, coloque um botão com o texto abrir arquivo e altere o name dele, e adicione o slot clicked nele, e coloque esse código:
void MainWindow::on_btnAbr_clicked() {
QString filtro = "Todos os Arquivos (*.*) ;; Arquivos de Texto (*.txt)"; // O que importa é o que está dentro dos parênteses
QString abrir = QFileDialog::getOpenFileName(this, "Abrir Arquivos", QDir::homePath(), filtro); // Inclua QFileDialog e QDir, ao invés do homePath pode ser o caminho, como C://
QFile arquivo(abrir); // Inclua QFile
if(!arquivo.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, "ERRO", "Erro ao Abrir o Arquivo!"); // Inclua QMessageBox
}
QTextStream entrada(&arquivo); // Inclua QTextStream
QString texto = entrada.readAll();
ui->plArq->setPlainText(texto);
arquivo.close();
}
PS: Para remover um arquivo, podemos fazer assim:
QFile arquivo(local);
arquivo.remove();