QA-3:
Q:這樣創(chuàng)建的按鈕和在ui里拖動(dòng)創(chuàng)建的有什么區(qū)別,為什么ui里(edit signals/slots)的我看不到代碼
A:基本沒(méi)有區(qū)別。UI 文件是基于 XML 的描述性文件。Qt 使用特殊的編譯器(uic)將 UI 文件翻譯成 C++ 源代碼,然后再進(jìn)行編譯。使用 UI 文件可以進(jìn)行快速開(kāi)發(fā),而直接使用代碼創(chuàng)建則更方便進(jìn)行控制
?
Q:
啟動(dòng)軟件后,東西全部擠疊在在一起了。
還有一個(gè)警告:QWidget::setLayout: Attempting to set QLayout “” on MainWindow “”, which already has a layout
A:
注意代碼中是QWidget window;
你大概是用成了QMainWindow window
QMainWindow 有自己的布局管理器,所以一般是把你的布局放在一個(gè) QWidget 上,然后將這個(gè) QWidget 設(shè)置為 centralWidget
?QMainWindow 的確是繼承自 QWidget,但是它同時(shí)添加了自己的 layout,正因?yàn)橛?layout 的存在,所以你需要使用 setCentralWidget() 函數(shù)把一個(gè) QWidget 設(shè)置為中心的組件,而不是把一個(gè)個(gè)的子組件用自己的 layout 添加進(jìn)去(因?yàn)?QMainWindow 已經(jīng)有了默認(rèn)的 layout,你自己的 layout 才會(huì)不起作用)。
Q:connect函數(shù)第二個(gè)參數(shù)像這樣加個(gè)括號(hào)就會(huì)報(bào)錯(cuò):call to non-static member function without an object argument。請(qǐng)教是什么原因,C++學(xué)的不扎實(shí)還請(qǐng)見(jiàn)諒
QObject::connect(&button, &(QPushButton::clicked), &QApplication::quit);
A:這里是取函數(shù)指針,加上括號(hào)后編譯器需要先執(zhí)行括號(hào)里面的語(yǔ)句,而這個(gè)語(yǔ)句是非法的,所以報(bào)錯(cuò)。函數(shù)的名稱就是函數(shù)的地址,但是在 C++ 中,取函數(shù)地址必須使用 & 運(yùn)算符。&究竟是引用還是取址,是根據(jù)上下文來(lái)判斷的。引用的話是必須初始化的
Q:QMetaMethod類型是用來(lái)做啥用的? A: QMetaMethod 用于實(shí)現(xiàn)反射機(jī)制,即利用函數(shù)名調(diào)用一個(gè)函數(shù)這類功能. 這個(gè)一般是一些高級(jí)用法,比如 Qt 4 中的信號(hào)槽,實(shí)際是用兩個(gè)字符串進(jìn)行關(guān)聯(lián),即 Qt 會(huì)記錄下,當(dāng)信號(hào) aSIGNAL 發(fā)出時(shí),調(diào)用 aSLOT 函數(shù)。此時(shí),aSIGNAL 和 aSLOT 在 Qt 內(nèi)部以字符串的形式存儲(chǔ)。當(dāng)運(yùn)行時(shí),Qt 發(fā)現(xiàn)了 aSIGNAL 信號(hào),則找到其對(duì)應(yīng)的 aSLOT 字符串,此時(shí)就利用 QMetaMethod 去調(diào)用這個(gè)字符串對(duì)應(yīng)的函數(shù)。如果感興趣,可以詳細(xì)了解下反射機(jī)制(不僅是 Qt,可以看看 Java 之類的,會(huì)更清晰一些,因?yàn)?C++ 語(yǔ)言級(jí)別的反射比較弱,所以 Qt 按照 Java 的方式做了增強(qiáng))。Tips:
一個(gè)程序中,在棧上分配太多對(duì)象可能會(huì)導(dǎo)致棧空間不足,從而程序崩潰。所以要適當(dāng)?shù)挠枚寻 ?/span>
轉(zhuǎn)載于:https://www.cnblogs.com/AbsolutelyPerfect/p/7770734.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 计算机控制中的pid是什么意思,PID代
- 下一篇: char **p, char a[16]