博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Q&A-3:
阅读量:5126 次
发布时间:2019-06-13

本文共 1368 字,大约阅读时间需要 4 分钟。

Q:这样创建的按钮和在ui里拖动创建的有什么区别,为什么ui里(edit signals/slots)的我看不到代码

A:基本没有区别。UI 文件是基于 XML 的描述性文件。Qt 使用特殊的编译器(uic)将 UI 文件翻译成 C++ 源代码,然后再进行编译。使用 UI 文件可以进行快速开发,而直接使用代码创建则更方便进行控制

 

Q:

启动软件后,东西全部挤叠在在一起了。

还有一个警告:QWidget::setLayout: Attempting to set QLayout “” on MainWindow “”, which already has a layout

A:

注意代码中是QWidget window;

你大概是用成了QMainWindow window

QMainWindow 有自己的布局管理器,所以一般是把你的布局放在一个 QWidget 上,然后将这个 QWidget 设置为 centralWidget

 QMainWindow 的确是继承自 QWidget,但是它同时添加了自己的 layout,正因为有 layout 的存在,所以你需要使用 setCentralWidget() 函数把一个 QWidget 设置为中心的组件,而不是把一个个的子组件用自己的 layout 添加进去(因为 QMainWindow 已经有了默认的 layout,你自己的 layout 才会不起作用)。

Q:connect函数第二个参数像这样加个括号就会报错:call to non-static member function without an object argument。请教是什么原因,C++学的不扎实还请见谅

QObject::connect(&button, &(QPushButton::clicked), &QApplication::quit);

A:这里是取函数指针,加上括号后编译器需要先执行括号里面的语句,而这个语句是非法的,所以报错。函数的名称就是函数的地址,但是在 C++ 中,取函数地址必须使用 & 运算符。&究竟是引用还是取址,是根据上下文来判断的。引用的话是必须初始化的

Q:QMetaMethod类型是用来做啥用的?
A:  QMetaMethod 用于实现反射机制,即利用函数名调用一个函数这类功能.
  这个一般是一些高级用法,比如 Qt 4 中的信号槽,实际是用两个字符串进行关联,即 Qt 会记录下,当信号 aSIGNAL 发出时,调用 aSLOT 函数。此时,aSIGNAL 和 aSLOT 在 Qt 内部以字符串的形式存储。当运行时,Qt 发现了 aSIGNAL 信号,则找到其对应的 aSLOT 字符串,此时就利用 QMetaMethod 去调用这个字符串对应的函数。如果感兴趣,可以详细了解下反射机制(不仅是 Qt,可以看看 Java 之类的,会更清晰一些,因为 C++ 语言级别的反射比较弱,所以 Qt 按照 Java 的方式做了增强)。
 

Tips:

一个程序中,在栈上分配太多对象可能会导致栈空间不足,从而程序崩溃。所以要适当的用堆啊。

转载于:https://www.cnblogs.com/AbsolutelyPerfect/p/7770734.html

你可能感兴趣的文章
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
Linux 普通用户拿到root权限及使用szrz命令上传下载文件
查看>>
人物角色群体攻击判定(一)
查看>>
JavaWeb学习过程 之c3p0的使用
查看>>
MySql Delimiter
查看>>
一步步学习微软InfoPath2010和SP2010--第九章节--使用SharePoint用户配置文件Web service(2)--在事件注册表单上创建表单加载规则...
查看>>
使用客户端对象模型读取SharePoint列表数据
查看>>
POJ 1328 Radar Installation 贪心
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
单元测试原来是这样的呼
查看>>
字符串
查看>>
给lnmp一键包中的nginx安装openresty的lua扩展
查看>>
cogs 547:[HAOI2011] 防线修建
查看>>
WebForm
查看>>
nginx 编译安装
查看>>
1001 A+B Format (20 分)
查看>>
while中的break
查看>>
tomcat 访问去掉项目名 直接访问 localhsot
查看>>