Re: [问题] QT DESIGER产生CODE的地方

楼主: Serge45 (QAQ)   2016-09-26 01:21:53
※ 引述《MOONY135 (谈无欲)》之铭言:
: 开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VS 2015 C++
: 额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
: QT 5.7
: 问题(Question):
: 小弟刚从C#过来
: C#在WINFORM拉画面的时候 他会在DESINGER.CS档产出CODE
: 会有名字 位置 触发事件等等
: =============================
: this.lbcpuName = new System.Windows.Forms.Label();
: this.lbcpuName.AutoSize = true;
: this.lbcpuName.Location = new System.Drawing.Point(30, 35);
: this.lbcpuName.Name = "lbcpuName";
: this.lbcpuName.Size = new System.Drawing.Size(72, 15);
: this.lbcpuName.TabIndex = 2;
: this.lbcpuName.Text = "CPU型号 :";
: =============================
: 最近开始用QT 但对于QT DESIGNER有一个疑问是
: 直接拉画面的时候 他的widget的CODE会产生在哪边呢?
: 还有想知道DESIGER的SLOT写完之后CODE会出现在哪边?
: 现在看起来纯手工打造好像问题会比较少?
Qt 的文件非常完整,看 code 逆向去学有点辜负写文件的人的苦心...XD
以 QLabel 来说,在 http://doc.qt.io/qt-5/qlabel.html
就能知道它提供的接口有哪些。
不过我想你的问题应该是对于 Qt 怎么对待原始码还不甚了解才会导致你“怕怕的”,
我简单举个例子:
假设我们想做个 Widget,原始码有
0. widget.pro
1. widget.h (class 宣告内要有 Q_OBJECT,如果想用 signal-slot 机制的话)
2. widget.cpp
3. widget.ui
使用 qmake 的话,会产生
a. Makefile
b. ui_widget.h
c. moc_widget.cpp
b. 跟 c. 分别由 uic 跟 moc 产生,
而 widget.ui 里面的设定、signal-slot 等等都会被转换到 ui_widget.h,
而这个 ui_widget.h 里面是个 class 比如 Ui::WidgetClass 之类的。
所以 Qt Creator 帮你建立的 widget.h 里面就会长得像这样:
#include <QWidget>
#include "ui_widget.h"
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::WidgetClass ui;
};
然后在 Constructor 的地方会呼叫 ui.setupUi(this) 来把元件建立出来,
之后我们就可以用 ui.label 之类的来存取元件。
在 Visual Studio 的情况,qmake 只是用来产生 solution/project,
驱动 moc 跟 uic 的是在专案里 widget.h 跟 widget.ui 的 prebuild event 里面,
当你有装 Qt VS add-in 的情况下,加档案进专案时就帮你填好了。
而 moc 与 uic 输出的目录通常在 $(ProjectDir)\GeneratedFiles\ 里面,
输出目录都可以在 Qt project settings 里设定。
作者: MOONY135 (谈无欲)   2016-09-26 08:01:00
非常感谢 因为之前C#有 所以才想说是不是也可以有同样功能

Links booklink

Contact Us: admin [ a t ] ucptt.com