Qt 编程点滴 初学者必看 (8)
创始人
2024-08-01 02:30:30
0

Qt 编程继续为大家讲解,还是接着文章Qt 编程点滴 初学者必看 (7),继续介绍,说编程那些细节。由于本话题是一节一节为大家介绍的,所以更多内容请看末尾编辑推荐。

如何让Qt程序只运行一次:

以下代码在Ubuntu,win下测试通过:

  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5. #include   
  6.  
  7. int main(int argc, char *argv[])  
  8. {  
  9.     QApplication app(argc, argv);  
  10.     QSystemSemaphore sema("JAMKey",1,QSystemSemaphore::Open);  
  11.     sema.acquire();//在临界区操作共享内存  SharedMemory  
  12.     QSharedMemory mem("SystemObject");//全局对象名  
  13.     if (!mem.create(1))//如果全局对象以存在则退出  
  14.     {      
  15.         qDebug()<         sema.release();//如果是Unix系统,会自动释放。  
  16.         return 0;  
  17.     }  
  18.     sema.release();//临界区  
  19.  
  20.     QLabel label("Demo");  
  21.     label.show();  
  22.     return app.exec();//释放栈上的mem对象。  

打印当前代码行所在的文件与行:

  1. qDebug()<<"所在文件:"< qDebug()<<"所在行:"<   
  2. undefined reference to `qInitResources_gui()\\\'  
  3. pro文件中,请注意 "RESOURCES += "不可写成"RESOURCES = ";  
  4. *.pro :    unix: DEFINES += __LINUX__  
  5. #ifdef __LINUX__  
  6.   ...  
  7. #else  
  8.   ...  
  9. #endif 

取得信号对象指针:

  1. QObject * QObject::sender() const   
  2. QToolButton* toolBtn = static_cast(sender()); 

函数申明后面带有const 的函数,函数体里所调用的函数的申明后面肯定也要带有 const

否则,编译不过

请教如何在Qt的pro文件中定义字符串宏在qtcentre中一位高人的方法得到实现:

  1. DEFINES += SHARE_DIR=\\\"字符串\\\" 

如果使用OObject::tr("你好")对汉字进行赋值,但使用 qDebug()打印时出现乱码,有可能是*.cpp文件编码有误,请把*.cpp文件编码改为UTF-8编码;

  1. error: new types may not be defined in a return type  
  2. error: return type specification for constructor invalid 

请检查类定义后有没加";"

win下电脑待机方法:

  1. static HANDLE hToken;  
  2. static TOKEN_PRIVILEGES tp;  
  3. static LUID luid;  
  4. if(::OpenProcessToken(GetCurrentProcess(),  
  5.        TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,  
  6.        &hToken))  
  7. {  
  8.  ::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);  
  9.  tp.PrivilegeCount=1;  
  10.  tp.Privileges[0].Luid =luid;  
  11.  tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;  
  12.  ::AdjustTokenPrivileges(hToken,false,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);  
  13. }  
  14. ::SetSystemPowerState(true,true); 

 改变QMessageBox的大小:,创建一个QMessageBox:

  1. QMessageBox msgBox(this);  
  2. msgBox.setWindowTitle(tr("MailBox Location"));  
  3. msgBox.setInformativeText(tr("You must ..... and so on and so forth")); 

像这样改变它的大小:

  1. msgbox.setGeometry ( int x, int y, int w, int h )  
  2. msgbox.resize(int w, int h) 

结果什么都没有发生。

原因:QMessageBox::showEvent() 强制将其大小改变成了QT认为比较合适的大小。要改变它的大小可使用下面这种方法

  1. class MyMessageBox : public QMessageBox {  
  2. protected:  
  3. void showEvent(QShowEvent* event) {  
  4. QMessageBox::showEvent(event);  
  5. setFixedSize(640, 480);  
  6. }  
  7. }; 

小结:本文主要介绍了在Qt 窗体的使用,通过Qt 编程点滴介绍,也给自己提高了编程过程中需要注意的细节问题,由于本话题是一节一节为大家展现的,所以更多内容,请看编辑推荐。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...