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 编程点滴介绍,也给自己提高了编程过程中需要注意的细节问题,由于本话题是一节一节为大家展现的,所以更多内容,请看编辑推荐。