美文网首页
【6】QT文件拖放并读取

【6】QT文件拖放并读取

作者: 业余玩家 | 来源:发表于2017-01-22 21:21 被阅读129次

    今天终于能够安静的学点东西了,最近这些天总是能够碰到一些小事要处理,都快没有学习的欲望了,大概是快要过年的缘故吧。最近发现一个好玩的东西,calm网站能够聆听一些自然的声音,比如雨声,流水声等,今天就是听着这个声音来敲着代码,感觉有点意思。

    文件拖放并读取里面的内容
    //mainwindow.h
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QDrag>
    #include <QTextEdit>
    #include <QDragEnterEvent>
    #include <QDropEvent>
    #include <QMimeData>
    #include <QList>
    #include <QDebug>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    protected:
        void dragEnterEvent(QDragEnterEvent *event);
        void dropEvent(QDropEvent *event);
    private:
        bool readFile(const QString &fileName);
        QTextEdit *textEdit;
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H
    
    //mainwindow.cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        textEdit = new QTextEdit;
        setCentralWidget(textEdit);
    
        //设定为只读
        textEdit->setReadOnly(true);
    
        //支持拖放
        setAcceptDrops(true);
    
        setWindowTitle(tr("text editor"));
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    //当用户拖动文件到窗口部件上时候,就会触发dragEnterEvent事件
    void MainWindow::dragEnterEvent(QDragEnterEvent *event)
    {
        //如果为文件,则支持拖放
        if (event->mimeData()->hasFormat("text/uri-list"))
            event->acceptProposedAction();
    }
    
    //当用户放下这个文件后,就会触发dropEvent事件
    void MainWindow::dropEvent(QDropEvent *event)
    {
    
        QList<QUrl> urls = event->mimeData()->urls();
        if(urls.isEmpty())
            return;
        //多个文件取第一个来进行后面的操作
        QString fileName = urls.first().toLocalFile();
        if (fileName.isEmpty()) {
            return;
        }
    
        if (readFile(fileName)) {
            setWindowTitle(tr("%1 - %2").arg(fileName, tr("Drag File")));
        }
    }
    //读取文本内容
    bool MainWindow::readFile(const QString &fileName)
    {
        bool r = false;
        QFile file(fileName);
        QString content;
        if(file.open(QIODevice::ReadOnly)) {
            content = file.readAll();
            r = true;
        }
        textEdit->setText(content);
        return r;
    }
    
    //main.cpp
    #include "mainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        return a.exec();
    }
    

    备注:这个代码虽然不多,但是花了很多时间,按照豆子博主的那种写法,其实没有得到想要的效果,刚开始也找不到问题的所在,于是在网上看了其他人写的一些代码,经过多次设置断点调试才发现问题所在,把textEdit要设置为只读模式才能读取到文本的内容。

    计蒜客 计数和数数

    “伯爵说”序列如下:1,11,21,1211,111221,…。其1读作one 1或者11。11读作two 1s或者21。21读作one 2, one 1或者1211。
    题目的意思就是一个元素中存在几个1,几个2,几个3...然后将结果作为下一个元素,依次类推下去得到这个序列。

    #include<iostream>    
    using namespace std;    
    string result[100];    
    string str(string s) {         //具体的转换函数    
      string a = "";    
      int l = s.length(), i, j, m;    
      for (i = 0; i < l; i = i + m) {    
          m = 1;    
          for (j = i + 1; j < l; j++) {    
            if (s[i] == s[j])    
              m++;    
            else    
              break;    
          }    
          char c = m + '0';    
          a.push_back(c);    
          a.push_back(s[i]);    
      }    
      return a;    
    }    
    string rec(int n) {   //动态规划函数    
      string res;    
      if(result[n] != "")     
        return result[n];    
      if (n == 1)    
        res = "1";    
      else    
        res = str(rec(n - 1));    
      return res;    
    }     
    int main() {    
      int n;    
      while(cin >> n)    
        cout << rec(n) << endl;    
    }
    

    备注:这段代码来自网络,自己写了半天,发现总是有bug,于是就参考了其他人的解法,来了解一下这个题目。

    相关文章

      网友评论

          本文标题:【6】QT文件拖放并读取

          本文链接:https://www.haomeiwen.com/subject/rqcwbttx.html