如果没有其他原因而不是为了我自己的娱乐,我希望编写一个全局插入操作符,以便我可以使用花哨的代码:
aQMenu << aQAction1 << aQAction2 << aQAction2 << seperator << aQAction3;
Run Code Online (Sandbox Code Playgroud)
也许你讨厌语法,但我至少想尝试使用它.问题是,这是我第一次尝试编写插入操作符代码,而且我很难过.将枚举"seperator"插入QMenu*的代码很简单,我有这个工作,但我认为这段代码适用于将QAction*插入QMenu*:
// does not compile: "must have an argument of class or enumerated type"
QMenu *operator<< (QMenu *menu, QAction *action)
{
menu->addAction(action);
return menu;
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说这个函数需要一个类或枚举类型的参数,这让我感到困惑,因为第二个参数是类类型的.我试图用&符改述这个函数,但我还没有找到写作方式它适当地下来.我已经看了很多关于网络示例的内容,并认为现在是时候讨论这个问题了.
我知道那里的一些编码器会抱怨我偏离标准的Qt语法,但我很乐意用其他类重载运算符<<.似乎插入操作符在这里工作得很好.我能说什么 - 这让我很开心.
编译器抱怨,因为所有参数都是指针.使用运算符菜单参数的引用,它将如下所示:
QMenu& operator<< (QMenu &menu, QAction *action) {
menu.addAction(action);
return menu;
}
Run Code Online (Sandbox Code Playgroud)
现在这个操作符应该处理菜单对象.如果要将其与指向菜单的指针一起使用,则需要在应用new <<运算符时取消引用该指针:
QMenu *menu = new QMenu();
QAction *action1, *action2;
...
*menu << action1 << action2;
Run Code Online (Sandbox Code Playgroud)