并不是很好的方法,在WindowStateChange后,实际上minimizing已经完成,
而最好的地点应该是clicking后,但未实际招执行minimizing的位置上。
重载winEvent是个不错的方法
bool event(QEvent *event)
{
if(event->type() == QEvent::WindowStateChange)
{
if (event->spontaneous() && isMinimized()) {
hide();
setWindowFlags(Qt::FramelessWindowHint);
//if you want to show the window again you need the following
//setWindowFlags(Qt::Window);
//show();
return true;
}
else
QWidget::event(event);
}
else
QWidget::event(event);
}
Monthly Archives: August 2005
Qt 4.0.1 win commercial
QMenu popup strange behavior
If you need to use all available screen, then you must look up in qmenu.cpp source file in 1273 line where is:
QRect screen = QApplication::desktop()->availableGeometry(p);Change it to:QRect screen = QApplication::desktop()->screenGeometry(p);then it works like you need
Yes, it does!
TrayIcon for Qt4
static HICON createIcon( const QPixmap &pm, HBITMAP &hbm )
{
iconInfo.fIcon = TRUE;
iconInfo.hbmMask = hbm = pm.createMaskFromColor(Qt::black).toWinHBITMAP();
iconInfo.hbmColor = pm.toWinHBITMAP(QPixmap::PremultipliedAlpha);
DeleteObject(iconInfo.hbmMask);
iconInfo.hbmMask = hbm = 0; // michalj
return icon;
}
{
#ifdef Q_OS_WIN
// This is for Windows, where menus appear on mouse release
switch ( e->button() ) {
case Qt::RightButton:
if ( pop ) {
// Necessary to make keyboard focus
// and menu closing work on Windows.
pop->activateWindow();
pop->exec( e->globalPos());
pop->activateWindow();
e->accept();
}
break;
…
}
#endif
e->ignore();
}
about Qtcn
F.
Wu给我写信说,qtcn他看了一下,暂时不想去,还没有形成讨论问题的氛围,有的只是几个可笑的连c/c++还搞不清楚的人在讨论幼稚的问题。将我也骂
进里面去了,我居然还在struct和class里发了好几个帖子,想使他们搞明白是怎么回事,结果被人胡搞蛮缠,成了谩骂的帖子了。只是我从来没在一个
技术论坛上会看到这种情况,不仔细研究别人给的答案,单凭自己的可怜的一点知识来判定回帖人的对错,这种后果是很可怕的,这样的风气也不可取,从个人讲妨碍个人的进步,从论坛上这种习惯会传染的。好在终于决定不再看这种帖子了。
c/c++应该是Qt的基础,c/c++没学好,学习Qt会有较大的问题。
重载最小化的默认behavior
谢谢qtforum的bubu提示,他给出的方案是:
bool testMinimize::winEvent(MSG *message, long *result)
{
if (message->message == WM_SYSCOMMAND && message->wParam == SC_MINIMIZE) {
ShowWindow(winId(), SW_HIDE); //WinAPI
(*result) = false;
d->tray->show();
return true;
}
…
}
然后调用 ShowWindow(winId(), SW_SHOW);显示
但有一个不足,上述hide后,不能用QMainWindow::show()回来。我在bubu的基础上改了一下,如下:
bool testMinimize::winEvent(MSG *message, long *result)
{
if (message->message == WM_SYSCOMMAND && message->wParam == SC_MINIMIZE) {
// ShowWindow(winId(), SW_HIDE); //WinAPI
hide();
(*result) = false;
d->tray->show();
return true;
}
return QMainWindow::winEvent(message, result);
}
居然发现hide在winEvent里可以用。惊喜!这样就可以用QMainWindow::show()回来了。
感谢bubu at qtforum!
使得QDialog关闭的时候不自动退出
giscn[at]msn[dot]com
适用情况:当主窗口hide在后台,这时在trayIcon上打开一个about窗口,关闭此about
窗口,将自动退出整个程序。
原因:Qt 4.0.1自动将lastWindowClosed与quit()相连。而这时主窗口被隐藏,在关闭
about窗口时,因为检测到about窗口有WA_QuitOnClose属性,在about关闭后,继续检
测有无visible的带WA_QuitOnClose属性的窗口(lastWindowClosed),因为检测到没
有,所以激发quit(),从而退出。
solution: 在about dialog的合适位置(一般是constructor)加入
setAttribute(Qt::WA_QuitOnClose, false); 清除WA_QuitOnClose标志。这样在关闭
about时,不会继续检测lastWindowClosed,从而不激发quit。
subVersion定制
对基于regular web browser的输出进行了定制,从subversion源码包里取到toolssvnindex.xsl,在httpd.conf的svn Location段里增加了
DAV svn
SVNParentPath /usr/local/svn
SVNIndexXSLT "/svnindex.xsl"
…
</Location>
效果见如附图
Url: http://503.mygis.org
几个svn命令
binhtpasswd -c pwd-file <username>
add user to user file:
binhtpasswd pwd-file <username>
create bdb repository:
svnadmin create –fs-type bdb <newRepository>
svnadmin create –fs-type fsfs <newRepository>
backup repository:
svnadmin hotcopy path/to/repository path/to/backup –clean-logs
subVersion 1.2.3 & Apache 2.0.54
note: 如果已开iis,先禁止之。
2. 下载svn-win32-1.2.3.zip,
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
2.1 解压缩至 c:program filessvn-win32-1.2.3目录
2.2 将sharelocale下面的删除掉,zh-CN在xp下运行不正常
3. 创建repository
svnadmin create d:/projects/pm
4. copy bin/mod_authz_svn.so 和bin/mod_dav_svn.so 到C:Program FilesApache
GroupApache2modules目录下
将bin/*.dll 复制 %apachedir%bin(实际上只要/bin/libdb43.dll复制过去就可以)
4.1 打开C:Program FilesApache GroupApache2conf下的httpd.conf
4.2 在# Dynamic Shared Object (DSO) Support段下,增加
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
note: 这两句必须加在 LoadModule dav_module modules/mod_dav.so之后,如果该语句被注释,则去掉注释;将dav_fs_module modules/mod_dav_fs.so的注释也去掉。
4.3 配置repository
htpasswd -cm d:/svn/svn-auth-file tong
new password:
confirm password:
htpasswd -m d:/svn/svn-auth-file new_user
在httpd.conf最后增加
#configuration for subVersion
<Location /svn>
DAV svn
SVNParentPath d:/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile d:/svn/svn-auth-file
Require valid-user
AuthzSVNAccessFile d:/svn/svn-access-file
</Location>
svn-access-file结构
[svn1:/] //这表示,仓库svn1的根目录下的访问权限
harry = rw // svn1仓库harry用户具有读和写权限
sally = r // svn1仓库sally用户具有读权限
[svn2:/] //svn2仓库根目录下的访问权限
harry = r // harry用户在svn2仓库根目录下只有读权限
sally = // sally用户在 svn2仓库根目录下无任何权限
#[/] // 这个表示在所有仓库的根目录下
#* = r // 这个表示对所有的用户都具有读权限
#[groups] // 这个表示群组设置
#svn1-developers = harry, sally // 这个表示某群组里的成员
#svn2-developers = sally
#[svn1:/]
#@svn1-developers = rw // 如果在前面加上@符号,则表示这是个群组权限设置
5. 重启apache server
http://503.mygis.org/svn/测试
本文参考subversion 3.1.2 INSTALL, README
和Qt中文论坛(qtcn.org)"Subversion版本管理器简单配置说明" by XChinux