有一个包含一些项目的列表框。还有一个带有 3x3 矩阵的网格。用户将拖动一个项目并将其放在网格的单元格上。
我发现的大多数示例都是关于从一个列表框拖放到另一个列表框的。但我想放入网格的一个单元格中。我怎样才能做到这一点?
请指教。谢谢 PJ
是否可以在拖放操作期间使用 QMimeData 将指针传递给 QObject?QMimeData 只有这个功能用于存储数据:
void QMimeData::setData(constQString &mimeType, const QByteArray &data)
Run Code Online (Sandbox Code Playgroud)
但我找不到将指针安全地编码为 QByteArray 的方法。
为了阐明我的目标:我需要在拖放操作期间将指向 QObject 的指针从模型传递到目标小部件。
编辑:据我所知,Mime 数据就是将独立于应用程序的数据从一个地方传递到另一个地方:url、颜色、html 代码。在我的情况下,我需要传递一个指向应用程序中的资源对象的指针。你通常如何处理这种拖放?
谢谢安东

考虑到这是一个显示文件和文件夹的 ListView,我已经为复制/移动/重命名/显示属性等编写了代码,我只需要最后一件事。如何像在 Windows 资源管理器中一样在同一个 ListView 中拖放,我有移动和复制功能,我只需要获取用户在某个文件夹中放置的项目或以其他方式我需要获取这两个参数来调用复制功能
void copy(ListViewItem [] droppedItems, string destination path)
{
// Copy target to destination
}
Run Code Online (Sandbox Code Playgroud) 在我自己的 TextEdit(继承QTextEdit)中,我实现了这个 DragEventHandler:
void CustomTextEdit::dragEnterEvent(QDragEnterEvent* e)
{
qDebug() << "void CustomTextEdit::dragEnterEvent(QDragEnterEvent* e)";
qDebug() << "e->mimeData()->hasText() is" << e->mimeData()->hasText();
QTextEdit::dragEnterEvent(e);
}
Run Code Online (Sandbox Code Playgroud)
示例:当我在 TextEdit 中选择文本并拖动它时,处理程序被调用并且hasText()是true.
当我从一个拖动一个项目QListWidget到文本编辑处理程序也被调用,但是hasText()是false。我该如何处理 DropEvent 呢?(QDragEnterEvent基本上是一个QDropEvent)
我知道这将在 DropHandler 中完成,但我的问题是
DropEvent 来自QListWidget包含哪些信息?
如何访问这些信息?
我正在尝试创建一个在状态栏中具有 NSStatusItem 图标的 Mac 应用程序。状态栏图标应支持文件拖放,并且在单击时还必须显示菜单。
问题是我已经设法分别实现了这两个功能,并且很难将它们合并在一起。
我能够使用此链接创建状态栏应用程序:
http://cocoatutorial.grapewave.com/2010/01/creating-a-status-bar-application/
然后我能够使用以下链接在状态栏图标上实现拖放功能
我面临的问题如下,为了进行拖放,我必须创建另一个视图,然后将该视图分配给 NSStatusItem,如下所示:
NSStatusItem *statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
ViewWithDragFunctionality* viewWithDrag = [[ViewWithDragFunctionality alloc] initWithFrame:NSMakeRect(0, 0, 24, 24)];
[statusItem.view addSubview:viewWithDrag];
Run Code Online (Sandbox Code Playgroud)
由于这只是一个视图,它显然不像 NSStatusItem 的默认视图那样运行,并且不支持鼠标交互或其他任何东西。通过向 ViewWithDragFunctionality.m 添加以下函数,我设法找到了解决方法
- (void)mouseDown:(NSEvent *)theEvent {
NSLog(@"Status Bar Icon Clicked");
}
Run Code Online (Sandbox Code Playgroud)
只要单击状态栏图标并且还检测到文件拖放,就会调用该函数。
但是现在我被困在弄清楚如何在单击状态栏图标时显示菜单。
任何帮助都感激不尽。我正在为此寻找解决方案,如果我先找到一些东西,我会在这里发布:)
问候
舒迈斯
“当我拖放具有多个布局的图像时,自动滚动效果不佳”
我到处搜索,但找不到解决方案。我从这个链接得到了一个解决方案:
@thehayro 感谢提供这么好的例子。
但它仅适用于一种布局,并且自动滚动也有效。但是我在一个线性布局中有超过 4-5 个子布局,并且此布局在滚动视图中,我的布局文件如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.example.dragvdropdemo.MyScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/scroll_view">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/lldrag">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dip"
android:id="@+id/ll1"
android:layout_marginTop="10dip"
android:background="@android:color/darker_gray">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/dr_logo" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/fb" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dip"
android:id="@+id/ll2"
android:layout_marginTop="10dip"
android:background="@android:color/darker_gray">
<ImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/twitter" />
<ImageView
android:id="@+id/ImageView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<ImageView
android:id="@+id/ImageView03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dip"
android:id="@+id/ll3"
android:layout_marginTop="10dip" …Run Code Online (Sandbox Code Playgroud) 有没有办法单击 svg 中的任意位置并使元素捕捉到该位置并同时开始拖动?
我得到的最接近的是下面的代码。拖动圆圈有效并单击其他地方将使圆圈移动到该位置,但我无法弄清楚如何在不释放鼠标并直接单击圆圈的情况下开始拖动。
更一般地说,如何在不直接与被拖动元素交互的情况下开始拖动行为?
var width = 200,
height = 200,
radius = 10;
var drag = d3.behavior.drag()
.origin(function(d) { return d; })
.on("dragstart", function(){
d3.event.sourceEvent.stopPropagation()
})
.on("drag", dragmove);
var svg = d3.select("body")
.data([{x: 100, y : 100}])
.append('svg')
.attr("height", 200)
.attr("widht", 200)
.on("mousedown", function(){
circle.each(dragmove)
});
var circle = svg.append("circle")
.attr("r", radius)
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
.call(drag);
function dragmove(d) {
d3.select(this)
.attr("cx", d.x = Math.max(radius, Math.min(width - radius, d3.event.x))) …Run Code Online (Sandbox Code Playgroud) 我有,我希望用户能够拖拽文本(C#项目,即移动文本)内一个RichTextBox在WinForm的。
我找到了许多示例,展示了如何将某些内容拖放到 RichTextBox 上,但是当 RichTextBox 既是拖放源又是拖放目标时,我没有成功地让它们工作。
我该怎么做?
以下是我迄今为止的非工作尝试。
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.richTextBox1.AllowDrop = true;
this.richTextBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.richTextBox1_DragEnter);
this.richTextBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.richTextBox1_DragDrop);
}
private void richTextBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) {
if (e.Data.GetDataPresent(DataFormats.Rtf))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}
private void richTextBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) {
int i;
String s;
i = richTextBox1.SelectionStart;
s = richTextBox1.Text.Substring(i);
richTextBox1.Text = richTextBox1.Text.Substring(0, i);
richTextBox1.Text = richTextBox1.Text +
e.Data.GetData(DataFormats.Text).ToString();
richTextBox1.Text = …Run Code Online (Sandbox Code Playgroud) 我有一个带有两个表单的 MDI 表单应用程序。第一个有一个 StringGrid,第二个有很多 Edit 控件和几个按钮。
我需要从网格中拖放到第二个表单上,并使用第一个表单中 StringGrid 中所选单元格的值更新一个 Edit。
如果我事先知道用户将在哪个控件上释放鼠标左键,这很容易做到,因为我可以设置该特定控件的 OnDragDrop 事件。但我不想为第二个窗体上的每个控件编写多个 OnDragDrop 事件。
如何拦截表单范围的消息以拦截任何控件上的删除操作?
我正在尝试实现一项功能,该功能由用户将一个collectionview单元拖放到另一个单元上。但是,我想完全更改运动中物体的预览,以匹配我的应用程序的视觉隐喻(该物体没有移动,该物体包含的东西正在移动)。
例如,假设我的collectionview单元显示了一支猪笔,而我想让猪从一支笔移动到另一只笔,则预览视图应该是只显示一只而不是一支笔的视图。这与苹果使用其API的意图稍有不同,但我认为这是有效的。
我已经看到过,func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters但这只是让您稍微裁剪一下,而不是重新制作整个视图。
有什么想法/想法吗?
drag-and-drop ×10
c# ×2
qt ×2
android ×1
copy ×1
d3.js ×1
delphi ×1
delphi-xe2 ×1
drag ×1
grid ×1
ios ×1
javascript ×1
listbox ×1
listview ×1
listviewitem ×1
macos ×1
nsmenu ×1
nsmenuitem ×1
nsstatusitem ×1
pointers ×1
qobject ×1
richtextbox ×1
svg ×1
winforms ×1
wpf ×1