Qt 编程点滴 初学者必看 (8)

本文介绍的是Qt 编程点滴,作为一名新手,我建议必须看一看。编程那些事,只有编程人员自己明白!所以推
首页 新闻资讯 行业资讯 Qt 编程点滴 初学者必看 (8)

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

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

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

复制

#include   #include   #include   #include   #include    int main(int argc, char *argv[])  {      QApplication app(argc, argv);      QSystemSemaphore sema("JAMKey",1,QSystemSemaphore::Open);      sema.acquire();//在临界区操作共享内存  SharedMemory      QSharedMemory mem("SystemObject");//全局对象名      if (!mem.create(1))//如果全局对象以存在则退出      {              qDebug()<         sema.release();//如果是Unix系统,会自动释放。          return 0;      }      sema.release();//临界区       QLabel label("Demo");      label.show();      return app.exec();//释放栈上的mem对象。  }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

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

复制

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

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

取得信号对象指针:

复制

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

  • 2.

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

否则,编译不过

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

复制

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

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

复制

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

  • 2.

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

win下电脑待机方法:

复制

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);
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

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

复制

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

  • 2.

  • 3.

像这样改变它的大小:

复制

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

  • 2.

结果什么都没有发生。

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

复制

class MyMessageBox : public QMessageBox {  protected:  void showEvent(QShowEvent* event) {  QMessageBox::showEvent(event);  setFixedSize(640, 480);  }  };
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

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

21    2011-06-17 15:32:28    Qt