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