拖放是Qt实现的应用程序内或者多个应用程序之间传递信息的一种直观的现代操作方式。有没有想到windows的剪贴板?数据的移动和复制功能都异曲同工嘞~
一、使拖放生效
拖放包含两个动作:拖动 和 放下。Qt窗口部件可以作为拖动点(drag site)、放下点(drop site)或者同时作为拖动和放下点使用。
第一个例子用来说明如何让一个Qt应用程序接受另一个程序触发的拖动事件。该Qt应用程序是一个QTextEdit为中央控件的主窗口。当用户从桌面或者一个文件浏览器中拖动一个文本文件到Qt程序时松开,程序把文件显示在QTextEdit控件中。
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
private:
bool readFile(const QString &fileName);
QTextEdit *textEdit;
};
在MainWindow类中,重新实现了
QWidget的函数dragEnterEvent()和dropEvent()。由于这个例子主要用来显示托拽,主窗口的很多其他功能都省略了。
MainWindow::MainWindow()
{
textEdit = new QTextEdit;
setCentralWidget(textEdit);
textEdit->setAcceptDrops(false);
setAcceptDrops(true);
setWindowTitle(tr("Text Editor"));
}
在构造函数中,我们创建了一个QTextEdit控件,并设置为中央控件。缺省情况下,QTextEdit接受来自其他应用程序拖拽来的文本,把文件名显示出来。由于drop事件是由子控件向父控件传播的,通过禁止QTextEdit控件的drop事件,来允许主窗口得到drop事件,我们就得到了MainWindow中的整个窗口的drop事件