Draggable Text例子展示了怎么样拖放文本数据。
本例程序可拖动放置单个Label控件到本程序任意位置。也可以将各个控件拖到其他应用程序中(如office软件),将显示label上的单词,也可以将其他应用程序中文本拖放到其中,他将拆分并显示为一个个单词的label。
项目文件有两个主要类:DragLabel DragWidget
先看main.cpp:
int main(int argc, char *argv[])
{
Q_INIT_RESOURCE(draggabletext);
QApplication app(argc, argv);
DragWidget window;
#ifdef Q_OS_SYMBIAN
window.showMaximized();
#else
window.show();
#endif
return app.exec();
}
Main函数里没有什么特别的,就是实例化并显示了DragWidget。
由于DragWidget的实现依赖DragLabel,下面先讲DragLabel。
class DragLabel : public QLabel
{
public:
DragLabel(const QString &text, QWidget *parent);
};
DragLabel定义很简单,继承QLabel,只添加了一个构造函数。QLabel是继承自QFrame。
DragLabel::DragLabel(const QString &text, QWidget *parent)
: QLabel(text, parent)
{
setAutoFillBackground(true); // 自动填充背景,默认是不填充透明的
setFrameShape(QFrame::Panel); // 设置形状:面板
setFrameShadow(QFrame::Raised);// 设置投影类型:下沉
}
下面看DragWidgetl类。
dragwidget.h:
class DragWidget : public QWidget
{
public:
DragWidget(QWidget *parent = 0);
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);