Qt 編程點(diǎn)滴 初學(xué)者必看 (8)
Qt 編程繼續(xù)為大家講解,還是接著文章Qt 編程點(diǎn)滴 初學(xué)者必看 (7),繼續(xù)介紹,說編程那些細(xì)節(jié)。由于本話題是一節(jié)一節(jié)為大家介紹的,所以更多內(nèi)容請(qǐng)看末尾編輯推薦。
如何讓Qt程序只運(yùn)行一次:
以下代碼在Ubuntu,win下測(cè)試通過:
- #include
 - #include
 - #include
 - #include
 - #include
 - int main(int argc, char *argv[])
 - {
 - QApplication app(argc, argv);
 - QSystemSemaphore sema("JAMKey",1,QSystemSemaphore::Open);
 - sema.acquire();//在臨界區(qū)操作共享內(nèi)存 SharedMemory
 - QSharedMemory mem("SystemObject");//全局對(duì)象名
 - if (!mem.create(1))//如果全局對(duì)象以存在則退出
 - {
 - qDebug()< sema.release();//如果是Unix系統(tǒng),會(huì)自動(dòng)釋放。
 - return 0;
 - }
 - sema.release();//臨界區(qū)
 - QLabel label("Demo");
 - label.show();
 - return app.exec();//釋放棧上的mem對(duì)象。
 - }
 
打印當(dāng)前代碼行所在的文件與行:
- qDebug()<<"所在文件:"< qDebug()<<"所在行:"<
 - undefined reference to `qInitResources_gui()\\\'
 - pro文件中,請(qǐng)注意 "RESOURCES += "不可寫成"RESOURCES = ";
 - *.pro : unix: DEFINES += __LINUX__
 - #ifdef __LINUX__
 - ...
 - #else
 - ...
 - #endif
 
取得信號(hào)對(duì)象指針:
- QObject * QObject::sender() const
 - QToolButton* toolBtn = static_cast(sender());
 
函數(shù)申明后面帶有const 的函數(shù),函數(shù)體里所調(diào)用的函數(shù)的申明后面肯定也要帶有 const
否則,編譯不過
請(qǐng)教如何在Qt的pro文件中定義字符串宏在qtcentre中一位高人的方法得到實(shí)現(xiàn):
- DEFINES += SHARE_DIR=\\\"字符串\\\"
 
如果使用OObject::tr("你好")對(duì)漢字進(jìn)行賦值,但使用 qDebug()打印時(shí)出現(xiàn)亂碼,有可能是*.cpp文件編碼有誤,請(qǐng)把*.cpp文件編碼改為UTF-8編碼;
- error: new types may not be defined in a return type
 - error: return type specification for constructor invalid
 
請(qǐng)檢查類定義后有沒加";"
win下電腦待機(jī)方法:
- static HANDLE hToken;
 - static TOKEN_PRIVILEGES tp;
 - static LUID luid;
 - if(::OpenProcessToken(GetCurrentProcess(),
 - TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
 - &hToken))
 - {
 - ::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
 - tp.PrivilegeCount=1;
 - tp.Privileges[0].Luid =luid;
 - tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;
 - ::AdjustTokenPrivileges(hToken,false,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
 - }
 - ::SetSystemPowerState(true,true);
 
改變QMessageBox的大小:,創(chuàng)建一個(gè)QMessageBox:
- QMessageBox msgBox(this);
 - msgBox.setWindowTitle(tr("MailBox Location"));
 - msgBox.setInformativeText(tr("You must ..... and so on and so forth"));
 
像這樣改變它的大?。?/p>
- msgbox.setGeometry ( int x, int y, int w, int h )
 - msgbox.resize(int w, int h)
 
結(jié)果什么都沒有發(fā)生。
原因:QMessageBox::showEvent() 強(qiáng)制將其大小改變成了QT認(rèn)為比較合適的大小。要改變它的大小可使用下面這種方法
- class MyMessageBox : public QMessageBox {
 - protected:
 - void showEvent(QShowEvent* event) {
 - QMessageBox::showEvent(event);
 - setFixedSize(640, 480);
 - }
 - };
 
小結(jié):本文主要介紹了在Qt 窗體的使用,通過Qt 編程點(diǎn)滴介紹,也給自己提高了編程過程中需要注意的細(xì)節(jié)問題,由于本話題是一節(jié)一節(jié)為大家展現(xiàn)的,所以更多內(nèi)容,請(qǐng)看編輯推薦。















 
 
 
 
 
 
 