使用私有拷贝construcor和赋值运算符boost::noncopyable或C++ 11 delete关键字很容易创建不可复制的类:
class MyClass {
private:
int i;
public:
MyClass(const MyClass& src) = delete;
MyClass& operator=(const MyClass& rhs) = delete;
int getI() {
return i;
}
MyClass(int _i) : i(_i){}
};
int main() {
MyClass a(1), b(2);
a = b; // COMPILATION ERROR
}
Run Code Online (Sandbox Code Playgroud)
但是,这并不能防止obiect被深度复制为一个字节包:
int main() {
MyClass a(1), b(2);
std::memcpy(&a, &b, sizeof(MyClass));
std::cout << a.getI() << std::endl; // 2
}
Run Code Online (Sandbox Code Playgroud)
即使试图通过声明operator&私有来阻止它,仍然可以使用地址的成语来实现复制:
int main() {
MyClass a(1), b(2);
std::memcpy(std::addressof(a), std::addressof(b), sizeof(MyClass));
std::cout << …Run Code Online (Sandbox Code Playgroud) 使用Kivy,如何在Python中更改标签的背景颜色而不是使用Kv语言?
我试过这个:
with self.canvas:
Color(1., 0, 0)
Rectangle(pos=(10, 10), size=(500, 500))
Run Code Online (Sandbox Code Playgroud)
然而,这只是在屏幕的左下方创建一个红色方块.如果有上述想法的替代方案并且我可以使用python而不是kv语言更改标签的背景颜色,那将非常有用.
在 Kivy 中,Popup 显示为灰色,应更改为红色
我的弹出代码:
class MyPopup(Popup):
def show_popup(self):
content = BoxLayout(orientation="vertical")
content.add_widget(Label(text="Game Over", font_size=20))
mybutton_cancel = Button(text="Cancel", size_hint_y=None)
content.add_widget(mybutton_cancel)
mypopup = Popup(content = content,
title = "oops",
auto_dismiss = False,
size_hint = (.5, .5))
mybutton_cancel.bind(on_release=mypopup.dismiss)
mypopup.open()
Run Code Online (Sandbox Code Playgroud)
我希望,很明显我在谈论弹出颜色而不是弹出窗口或弹出文本颜色后面的背景屏幕颜色。我说的是弹出矩形的颜色。请指教。