今天终于能够安静的学点东西了,最近这些天总是能够碰到一些小事要处理,都快没有学习的欲望了,大概是快要过年的缘故吧。最近发现一个好玩的东西,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,于是就参考了其他人的解法,来了解一下这个题目。