我正在尝试从QString设置Q_ENUM,但我不知道如何做到这一点。有经验的人吗?
答案 0 :(得分:4)
您需要从QMetaObject中获取匹配的QMetaEnum,用于声明Q_ENUM的基于QObject的类型。一旦有了,就可以获得字符串所代表的整数。对于带有名为EnumName的枚举的示例类MyEnumContainer,其具有名为SomeKeyInEnumName的条目,这可能类似于以下内容:
import tkinter as tk
# added only to define required global variable "txt"
class Txt(object):
def SetValue(data): pass
def GetValue(): pass
txt = Txt()
####
def load():
with open(textField.get()) as file:
txt.SetValue(file.read())
def save():
with open(textField.get(), 'w') as file:
file.write(txt.GetValue())
win = tk.Tk()
win.title('Text Editor')
win.geometry('500x500')
# create text field
textField = tk.Entry(win, width=50)
textField.pack(fill=tk.NONE, side=tk.TOP)
# create button to open file
openBtn = tk.Button(win, text='Open', command=load)
openBtn.pack(expand=tk.FALSE, fill=tk.X, side=tk.TOP)
# create button to save file
saveBtn = tk.Button(win, text='Save', command=save)
saveBtn.pack(expand=tk.FALSE, fill=tk.X, side=tk.TOP)
win.mainloop()
对于QMetaEnum中的其他有用技巧,https://doc.qt.io/qt-5/qmetaenum.html应该会给你一些想法。
答案 1 :(得分:0)
枚举示例(也适用于普通枚举):
enum class MyEnumType
{
foo,
bar
};
ENUM(MyEnumType);
我发现的最简单的方法是使用3条基本代码:
QString&& yourString = "foo";
auto&& metaEnum = QMetaEnum::fromType<MyEnumType>();
MyEnumType wantedEnum = static_cast<MyEnumType>(metaEnum.keyToValue(yourString)));
请注意,只有在字符串不为空时才使用keyToValue
执行!yourString.isEmpty()
。就我而言,枚举值最终在内存中为0xFF
。我没有在代码段中包含此内容,因为此检查取决于您的实现。