存档

文章标签 ‘QT’
839 views

为 QT 程序添加拖放文件到桌面的功能

2011年6月11日

QT 的例子程序 $(QTDIR)\examples\draganddrop\delayedencoding 宣称实现了这个功能, 其实没有, 根本不工作.
正确的方法如下所示:

#include <QtGui>

class Label : public QLabel
{
protected:
    void mouseMoveEvent(QMouseEvent* event)
    {
        QTemporaryFile file;
        if (file.open())
        {
            QUrl url = QUrl::fromLocalFile(file.fileName());
            file.write(text().toUtf8());
            file.close();

            QMimeData* mimeData = new QMimeData;
            mimeData->setUrls(QList<QUrl>() << url);

            QDrag* drag = new QDrag(this);
            drag->setMimeData(mimeData);
            drag->exec(Qt::CopyAction);
        }
    }
};

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    Label label;
    label.setText("foo bar");
    label.show();
    return app.exec();
}

关键点就是, 先创建一临时文件, 然后把数据写入. 最后

mimeData->setUrls(QList() << url);

将这个临时文件的路径写入 mimeData, 这样才能真正实现文件的拖放.

修改过的 delayedencoding 例子工程在这里. delayedencoding

现在, 最大的问题也是唯一的问题是,当文件很大的时候, 鼠标一按下去, 就会卡死主线程, 直到文件复制到本地临时目录后,才会恢复正常. 这期间还不能松开鼠标左键, 否则前功尽弃. 目前没找到更好的解决方案.

其他资讯:
Qt 智能指针学习
Count with me: how many smart pointer classes does Qt have?

技术心得 ,

748 views

用 VS 2010 玩转 QT

2011年4月27日

工作所需, 用 QT 作为开发环境, 入入门, 简单的介绍一些玩法.

1. 下载 QT 源代码包, 到其官方网站 http://qt.nokia.com/downloads 去找, 目前的版本是 4.7.2, Windows 版本的下载地址是
【Qt libraries 4.7.2 for Windows (VS 2008, 218 MB)】
源代码包的下载地址是
http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.2.zip

2. 将下载下来的源码包解开, 放到一个目录内, 我的是 E:\works\qt-everywhere-opensource-src-4.7.2

3. 编译 QT 源码库, 跟着 http://doc.qt.nokia.com/4.7/install-win.html 页面的导引, 开始编译; 下面是个简介.

(1). 将环境变量 QTDIR 加入系统, 值为 E:\works\qt-everywhere-opensource-src-4.7.2

(2). 将 Path 环境变量追加一个(如果 path 环境变量不存在, 则创建之), 从如

…\WindowsPowerShell\v1.0\

改成如

…\WindowsPowerShell\v1.0\;%QTDIR%\bin;%QTDIR%\lib

注意要加一个分号, 追加的信息和原有信息之间不能有空格.

(3). 运行 VS2010 的命令行 (开始 -> 所有程序 -> Microsoft Visual Studio 2010 -> Visual Studio Tools -> Visual Studio 命令提示(2010) );
在这个 DOS 窗口内运行如下命令

e:
cd E:\works\qt-everywhere-opensource-src-4.7.2
configure -opensource
nmake

对于 configure 命令, 如果带上参数 -static 将会编译出静态版本的 QT 库(但这里还是带有 VC 运行时, 如果要想彻底不带运行时, 必须手工修改 %QTDIR%\mkspecs\win32-msvc2010\qmake.conf 文件, 将 QMAKE_CFLAGS_RELEASEQMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO 标记的 -MD 值改成 -MT, 将 QMAKE_CFLAGS_DEBUG 标记的 -MDd 改成 -MTd ), 但这里没有带, 所以将是 DLL 版本的;

此外, configure 命令执行过程中, 会有一个询问, “Do you accept the terms of the license?”, 当然我们要回答 Y(es) 了, 否则啥也别搞.

最后, nmake 命令的执行要经过漫长的等待, 我这里是大概 4 个小时, 终于编译出了 VS 2010 的 QT 二进制文件, 包括 debug 版本和 release 版本, 均位于 %QTDIR%\lib 文件夹.

这里啰嗦一句, 如果你想重新完全生成编译配置, 先使用命令 nmake distclean 来清除配置, 然后再运行 configure 和 nmake 命令, 这里的 configure 命令可以更精细一些, 如 configure -opensource -platform win32-msvc 等等参数带着.

4. 将 VS 2010 用到的各种 include, lib, bin 路径告诉给 VS 2010, 包括:
(1).包含文件路径:

$(QTDIR)\include

(2).库文件路径:

$(QTDIR)\lib

(3).可执行文件路径:

$(QTDIR)\lib
$(QTDIR)\bin

具体怎么设就不废话了, 看图更直观.

阅读全文…

技术心得 ,