qt诡异的编译错误( forbids declaration of `parameter' with no type)

qt诡异的编译错误( forbids declaration of `parameter' with no type),第1张

QTextCharFormat 和 QLabel未定义,解决方法要么就是include相应的头文件,要么就是在前面加上类声明 class QTextCharFormat;class QLabel;

你理解反了。后者是相对窗口的,前者才是相对整个桌面。

新建一个窗口程序,然后创建一个QMenu对象。在构造函数里初始化

menu = new QMenu("menu", this); //menu在头文件声明

QAction action = new QAction(tr("1111"), this); //为使目录较大,能看见,我们添加一个action

menu->addAction(action);

然后在mousePressEvent里看到效果

void Dialog::mousePressEvent(QMouseEvent e)

{

if(e->button() == Qt::RightButton) //鼠标右键。避免无法关掉窗口

{

QPoint p(0, 0);

//menu->exec(p); //测试用,坐标相对于桌面

menu->exec(e->globalPos()); //坐标相对于窗口

//menu->exec(e->pos()); //坐标相对于桌面

}

}

可以看到,pos不管窗口怎样移动,menu总是出现在相同的地方。globalPos相对于窗口,跟着窗口移动

其实除了int类型,switch还能接受char类型的,其他类型我就不太清楚了。

另外,egetSource()返回的是一个Object类型的对象,不是基本类型,所以是不能用switch来判断的,只能用if了,不过其实用if也不是太麻烦,一点起码的耐心是要有的吧。

egetSource()的用法为:

if (egetSource() == button1)

……

……

button1是一个按钮。

其他组件也类似。

QT有内存回收机制

QMenu popMenu = new QMenu(this);

这种神情方式下,当父类窗口(this所代表的窗口)关闭时,QMenu所占用的内存会一起被回收

还有一种减小内存申请量的方法,就是在类gwExportAIsSettings中建立一个QMenu的private变量,每次调用contextMenuEvent方法时,直接为其添加action即可,这样只new一次就可以了。

以上就是关于qt诡异的编译错误( forbids declaration of `parameter' with no type)全部的内容,包括:qt诡异的编译错误( forbids declaration of `parameter' with no type)、Qt里的QMouseEvent的函数有一个是pos,一个是globalPos,我大概理解的是后者是相对整个桌面的~~、java中的switch问题,难到说只能接收int型数据吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9572403.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存