小编Cpp*_*ris的帖子

在QMainWindows之间拖动QDockWidgets

我有一个关于在QMainWindows之间拖动QDockWidgets的问题.我有一个具有不同"DockAreas"的应用程序,它有一个带有一个或多个QDockWidgets的QMainWindow成员.另外,我想让QDockWidgets可以拖放到其他已经浮动的QDockWidgets(没有标签!).

为了在拖放时获得漂亮的悬停效果,浮动QDockWidgets嵌入到具有QMainWindow成员的DockArea的新实例中.现在我拦截拖动的QDockWidget的mousemove事件,并在它悬停在我的DockArea的另一个QMainWindow时更改其父级.不幸的是,这会导致崩溃,看起来这个QDockWidget所在的原始QLayoutItem已经消失了.

void QDockWidgetPrivate::moveEvent(QMoveEvent *event)
{
    // ...
    // now this widgetItem member of state is kaputt
    layout->hover(state->widgetItem, globalMousePos);
}
Run Code Online (Sandbox Code Playgroud)

我发现了在互联网上QMainWindows之间拖放QDockWidgets的不同建议:

1)重新养育 - 这就是我正在尝试的东西

2)QDrag - 对我不起作用,async exec()打破了我的应用程序,最后我还是要重新调试

3)调用新QMainWindow的addDockWidget(...) - 停靠QDockWidget,我将不得不再次浮动并以某种方式"继续拖动"

我对任何新建议持开放态度:)提前谢谢!

c++ qt drag-and-drop qdockwidget qt5

7
推荐指数
1
解决办法
362
查看次数

QSettings中QVariant中的枚举类

我有枚举类,QVariants和QSettings类的问题.我想要存储在QVariant中的枚举类值,该QVariant进入QSettings实例.所以,我的代码实际上看起来像这样:

enum class Foo
{
    Bar1, Bar2
}
Q_ENUMS(Foo)
Q_DECLARE_METATYPE(Foo)

...

Foo value = Bar2;
QSettings settings;
settings.setValue(QString("Foo"), QVariant::fromValue(value));
Run Code Online (Sandbox Code Playgroud)

此时执行代码时,断言跳进并抱怨:

ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp
Run Code Online (Sandbox Code Playgroud)

在互联网上搜索,我发现该类缺少一个合适的<<和>>运算符.但这不是枚举类的选项.我甚至试过用

qRegisterMetaType<Foo>("Foo");
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.也许你有一些其他的建议/解决方案.谢谢!

qvariant qsettings c++11 enum-class qt5

5
推荐指数
1
解决办法
2737
查看次数

标签 统计

qt5 ×2

c++ ×1

c++11 ×1

drag-and-drop ×1

enum-class ×1

qdockwidget ×1

qsettings ×1

qt ×1

qvariant ×1