void QToolButton::mousePressEvent(QMouseEvent *event)从QDockWidget中无法拖拽到QtDrawingpaperEditor中,显示不让拖拽
时间: 2024-02-17 16:03:36 浏览: 69
这个问题可能是因为你没有正确设置QDockWidget和QtDrawingpaperEditor的拖放策略。你可以尝试在QDockWidget和QtDrawingpaperEditor的构造函数中添加以下代码:
```
setAcceptDrops(true);
setDragEnabled(true);
```
这样可以启用拖放功能。另外,你还需要重写QtDrawingpaperEditor的dropEvent()函数,以便正确处理拖放操作。例如:
```
void QtDrawingpaperEditor::dropEvent(QDropEvent *event)
{
const QMimeData *mimeData = event->mimeData();
if (mimeData->hasFormat("text/plain")) {
QString text = mimeData->text();
// 处理拖放的文本
}
}
```
当然,这只是一个简单的示例,你需要根据你的实际需求进行修改。希望能帮助到你解决问题。
相关问题
class Drawer : public QToolBox { Q_OBJECT public: Drawer(QWidget *parent=0, Qt::WindowFlags f=0); private: QToolButton *toolBtn1; QToolButton *toolBtn2; QToolButton *toolBtn3; QToolButton *toolBtn4; QToolButton *toolBtn5; QToolButton *toolBtn6; QToolButton *toolBtn7; QToolButton *toolBtn8; QToolButton *toolBtn9; public slots: void showChatWidget1(); void showChatWidget2(); void showChatWidget3(); void showChatWidget4(); void showChatWidget5(); void showChatWidget6(); void showChatWidget7(); void showChatWidget8(); void showChatWidget9(); private: Widget *chatWidget1; Widget *chatWidget2; Widget *chatWidget3; Widget *chatWidget4; Widget *chatWidget5; Widget *chatWidget6; Widget *chatWidget7; Widget *chatWidget8; Widget *chatWidget9; };实现点击QToolButton后跳出登录界面
可以在每个showChatWidgetX()槽函数中创建一个登录界面的实例,并调用它的show()函数显示出来。例如,showChatWidget1()槽函数可以实现如下:
```
void Drawer::showChatWidget1()
{
if (!chatWidget1) {
chatWidget1 = new Widget(this);
}
chatWidget1->show();
}
```
需要注意的是,在Drawer类的构造函数中要将chatWidget1等成员变量初始化为NULL。另外,Widget类是一个自定义的登录界面类,需要根据具体需求来实现。
C++Qt代码实现将QDockWidget中的QtoolButton复制拖拽到QtDrawingpaperEditor中
可以通过以下步骤实现将QDockWidget中的QtoolButton复制拖拽到QtDrawingpaperEditor中:
1. 在QDockWidget中创建QtoolButton,并将其设置为可拖拽:
```cpp
QToolButton *toolButton = new QToolButton(this);
toolButton->setText("My Button");
toolButton->setAutoRaise(true);
toolButton->setCursor(Qt::OpenHandCursor);
toolButton->setDragEnabled(true);
```
2. 在QtDrawingpaperEditor中实现拖拽事件的处理函数:
```cpp
void QtDrawingpaperEditor::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
event->acceptProposedAction();
}
}
void QtDrawingpaperEditor::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
QByteArray data = event->mimeData()->data("application/x-qabstractitemmodeldatalist");
QDataStream stream(&data, QIODevice::ReadOnly);
while (!stream.atEnd()) {
int row, col;
QMap<int, QVariant> roleDataMap;
stream >> row >> col >> roleDataMap;
QString text = roleDataMap[Qt::DisplayRole].toString();
// 在QtDrawingpaperEditor中创建新的QtoolButton,并设置其文本内容
QToolButton *newButton = new QToolButton(this);
newButton->setText(text);
newButton->show();
}
event->acceptProposedAction();
}
}
```
3. 将QtoolButton拖拽到QtDrawingpaperEditor中:
在QDockWidget中按住QtoolButton左键不放,拖动鼠标到QtDrawingpaperEditor中,释放左键即可。此时QtDrawingpaperEditor中会创建一个新的QtoolButton并显示其文本内容。
阅读全文