使用Qt我创建了一个QMainWindow,并希望在显示窗口后调用一个函数.当我在构造函数中调用该函数时,在显示窗口之前调用函数(实际上是一个对话框).
我使用这样的东西:
map<string, Data>::iterator it = mymap->begin();
map<string, Data>::iterator end = mymap->end();
while (it != end) {
// do stuff
++it;
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道即使地图是空的,这是否也能正常工作.如果地图为空,我找不到有关map :: begin()返回的任何信息.
考虑一个简单的GUI显示相当复杂的计算输出的情况.
现在我想用QML编写一个漂亮的自定义GUI .
我还想在QT C++中编写我的后台应用程序.
我坐在QT文档的前面,想知道我
是否应该编写一个QML应用程序并以某种方式在其中嵌入我的C++类(这是绝对可能的)或者如果我
2)应该编写一个C++应用程序
并以某种方式嵌入QML GUI中的GUI并修改我的类的QML属性(这也是可能的)
我已经使用QT Widgets为GUI编写了C++中的所有内容.我只想将GUI移动到QML并保留C++类,即使我愿意重写GUI的接口.
可能的anser:
下面标记的解决方案建议保留C++类并通过SIGNALS和SLOTS专门连接GUI.所以基本上我最终得到了一个main.cpp,它实例化我的主工作类并显示如下的QML GUI:
QQuickView viewer;
viewer.setSource(QUrl("./qml/main.qml"));
viewer.show();
Run Code Online (Sandbox Code Playgroud)
然后我添加了myClass并给我一个对象来做连接:
MyClass myClass;
QQuickItem* item = viewer.rootObject();
QObject::connect(item, SIGNAL(buttonClicked()), &myClass, SLOT(mySlot()));
QObject::connect(&myClass, SIGNAL(mySignal(QVariant)), item, SLOT(updateGUI(QVariant)));
Run Code Online (Sandbox Code Playgroud)
在C++类中实现插槽和信号时,必须使用QVariant对象来传输数据.然后,QML文件实现SIGNALS,例如用于单击按钮和SLOTS以接收要显示的数据.
这正是我所希望的.我的非GUI代码的唯一变化是通过SIGNALS和SLOTS进行所有交互.现在我甚至可以为我的应用程序使用两个GUI(QML/Widgets).
在Qt中有类似的类来列出地图.这些类提供了一个返回const_iterator的begin_const()方法.文档说这些const_iterators应尽可能使用,因为它们更快.
如果实例本身是const,则STL仅为您提供const_iterator.只实现了一个begin()方法(为const重载).
使用iterator和const_iterator读取元素时有什么区别吗?(我不知道Qt为什么它们有区别)
我想从文件中读取尽可能多的24位块. 如果我现在没有多少个块,我怎么能使用位串的' ConstBitStream?
目前我这样做:
eventList = ConstBitStream(filename = 'events.dat')
for i in range(1000) :
packet = eventList.read(24)
Run Code Online (Sandbox Code Playgroud)
(这里我必须预先计算事件的数量)
可能重复:
Python中的循环(或循环)导入
我有B类导入并创建类A的实例.A类需要在其构造函数中引用B,因此包括B.
from a import A
class B:
def __init__(self):
self.a = A()
Run Code Online (Sandbox Code Playgroud)
from b import B
class A:
def __init__(self, ref):
assert isinstance(ref, B)
self.ref = ref
Run Code Online (Sandbox Code Playgroud)
这不起作用.主文件导入B并使用它......不是.进口的东西是错误的.
文件 导入错误:导入错误:无法导入名称B.
当我使用Qt Creator创建Qt Quick/QML项目时,它会将DEPLOYMENTFOLDERS添加到.pro文件中.我可以使用此指令在构建(编译)应用程序时将一些文件夹/文件复制到构建目录.
我如何在一个简单的基于Qt Widget的应用程序中使用它?
Qt Creator不会为简单的Qt项目添加它,当我手动执行它时,它不起作用.
这是我的项目文件:
folder_01.source = sounds
#folder_01.target =
DEPLOYMENTFOLDERS += folder_01
QT += core gui widgets
TARGET = myApp
TEMPLATE = app
SOURCES += main.cpp
Run Code Online (Sandbox Code Playgroud)
我尝试了"/ sounds"和"sounds/*"并且这样想.但没有任何作用.我在这里错过了什么?
如果我将有序(递增)元素序列插入到映射中,最终的二叉树是否会以某种方式进行优化?或者每个元素都会有一个孩子"它是对的"?这会使这样一棵树非常低效,因为那时查找将是线性的.
我找不到有关插入STL地图的过程的详细信息.
在我自己的 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
包含哪些信息?
如何访问这些信息?
我想将自引用传递给实例化的类(子应该有权访问父类).如果所有内容都在这样的文件中,它就可以工作:
class ClassB:
def __init__(self, name, parent):
assert isinstance(parent, ClassA)
self.name = name
self.parent = parent
print('my parent is', parent.name)
class ClassA:
def __init__(self, name):
self.name = name
self.b = ClassB('child', self)
a = ClassA('parent')
Run Code Online (Sandbox Code Playgroud)
输出是my parent is parent
预期的
2文件版本是这样的:
class ClassB:
def __init__(self, name, parent):
from ClassA import ClassA
assert isinstance(parent, ClassA)
self.name = name
self.parent = parent
print('my parent is', parent.name)
Run Code Online (Sandbox Code Playgroud)
和:
from ClassB import ClassB
class ClassA:
def __init__(self, name):
self.name = name
self.b = …
Run Code Online (Sandbox Code Playgroud) 当使用Qt时,许多函数采用类似标志Qt :: LeftDockWidgetArea的参数.
即使我查看了Qt源代码,我也无法理解如何实现这种命名行为.它是普通的C++还是Qt特有的?
假设我有一个MyClass类:
class MyClass {
public:
MyClass();
void setFlag(???);
};
Run Code Online (Sandbox Code Playgroud)
我想像这样调用setFlag方法:
MyClass mc;
mc.setFlag(MyClass::flag1 | MyClass::flag2)
Run Code Online (Sandbox Code Playgroud)
flag1和flag2应该只是0x01和0x02,这是枚举吗?我必须在哪里声明?这个方法的论点是什么?
如果这很明显,我很抱歉,但我不明白.
解决方案(来自答案)
很好.从阅读下面的答案我添加了这个:(请注意,我没有真正需要标志,只是来自枚举的数字,这简化了很多)
namespace MyNames {
typedef enum {
FA = 0,
FB = 1
} Field;
}
class MyClass
{
public:
MyClass();
char getField(MyNames::Field f) const;
};
Run Code Online (Sandbox Code Playgroud)
这确实允许以下调用(不是):
mc.getField(MyNames::FA) //OK
mc.getField(1) //not OK
Run Code Online (Sandbox Code Playgroud) 我想我知道如何使用FocusScopes以及如何处理键盘焦点.
但我找不到一个聪明的方法来弄清楚我的一件儿童用品或他们或我下面的人是否有键盘焦点.
FocusScope的文档说:
当焦点范围接收到活动焦点时,包含焦点的所包含元素(如果有)也会获得活动焦点.如果此元素也是FocusScope,则代理行为将继续.焦点范围和子焦点项都将具有activeFocus属性集.
因此, 当焦点被放置到包含的FocusScope时,FocusScope 将activeFocus设置为false.有没有办法弄清楚是否是这种情况?我怎么知道至少一个包含的FocusScope是否得到了关注?
我从a创建一个拖动对象QListWidgetItem
.我可以在此拖动对象中将文本作为mime数据发送.
如何发送像素图并从mime数据中检索它?甚至可以创建QGraphicsItem
并检索它吗?
我尝试拖放QListWidget
到一个QGraphicsView
.