qt窗口化qt怎么关闭窗口

查看: 667|回复: 8
注册时间最后登录阅读权限10积分23精华0帖子
一鸣惊人, 积分 23, 距离下一级还需 77 积分
怎么还原,这窗口化很坑。。。
注册时间最后登录阅读权限10积分285精华0帖子
滔滔不绝, 积分 285, 距离下一级还需 15 积分
首先找到你的游戏路径,搜索Msimg32.dll这个文件,找到删除就可以了。
祝LZ游戏愉快~~
注册时间最后登录阅读权限10积分23精华0帖子
一鸣惊人, 积分 23, 距离下一级还需 77 积分
你早点回复我多好,害的我百度删错了文件,界面登不了.现在CF客户端重新下载Ing... ...
这个。。。人家才晚了10分钟嘛~~
注册时间最后登录阅读权限20积分515精华0帖子
出口成章, 积分 515, 距离下一级还需 485 积分
还是版主说的这个有效,这个窗口化问题多多,鼠标多次划出,这都很糟糕了,更糟糕的是,无法在窗口化的时候 ...
说的太好了,我们都是小白
Powered by有些窗口在自身最小化时要在桌面上显示一个小浮标,让用户利用这个小浮标进行各种操作(例如迅雷的悬浮窗一样),我试着用QT实现一下这个功能。
PS:本来以为这个功能很简单,却搞了我两个晚上,泪奔。。。
1:制作一个由一个小图标组成的,可点击,可拖动,背景透明的Widget
2:重载主窗口(在此例子中是QLabel)的changeEvent(详情见代码)
截图:(浅绿色的部分是桌面背景)
#include&&QtGui&&&
#include&&Windows.h&&&
class&MinIconWidget&:&public&QWidget&&&&&&
&&&&Q_OBJECT&&&&&&
private:&&&&&&
&&&&QPoint&m_CurrentP&&&&&&
&&&&QPixmap&m_P&&&&&&&&&
protected:&&&&&&
&&&&void&mousePressEvent(QMouseEvent&*event);&&&&&&
&&&&void&mouseMoveEvent(QMouseEvent&*event);&&&&&&
&&&&void&paintEvent(QPaintEvent&*event);&&&&&&
&&&&void&enterEvent(QEvent&*event);&&&&&&
&&&&void&leaveEvent(QEvent&*event);&&
&&&&void&mouseDoubleClickEvent(QMouseEvent&*event);&&
public:&&&&&&
&&&&MinIconWidget(QWidget&*parent&=&0);&&&&
&&&&void&SetPixmap(const&QPixmap&&pixmap);&&
signals:&&
&&&&void&DoubleClickedSignal();&&
MinIconWidget::MinIconWidget(QWidget&*parent)&&&&&&
:&QWidget(parent)&&&&&&
&&&&setWindowFlags(&Qt::FramelessWindowHint&&&
&&&&&&&&|&Qt::WindowStaysOnTopHint&|&Qt::Tool&);&&&&&&&&&
&&&&setAttribute(Qt::WA_TranslucentBackground,&true);&&
&&&&setFocusPolicy(Qt::NoFocus);&&
void&MinIconWidget::mousePressEvent(QMouseEvent&*event)&&&&&&
&&&&if(event-&button()&==&Qt::LeftButton)&&&&&&
&&&&&&&&m_CurrentPos&=&event-&globalPos()&-&frameGeometry().topLeft();&&&&&&
&&&&&&&&event-&accept();&&&&&&
&&&&}&&&&&&&&&
void&MinIconWidget::mouseMoveEvent(QMouseEvent&*event)&&&&&&
&&&&if&(event-&buttons()&&&&Qt::LeftButton)&&&&&&
&&&&{&&&&&&
&&&&&&&&move(event-&globalPos()&-&m_CurrentPos);&&&&&&
&&&&&&&&event-&accept();&&&&&&
&&&&}&&&&&&
void&MinIconWidget::paintEvent(QPaintEvent&*event)&&&&&&
&&&&QPainter&painter(this);&&&&&&
&&&&painter.drawPixmap(0,&0,&m_Pixmap);&&&&&&
void&MinIconWidget::leaveEvent(QEvent&*event)&&&&&&
&&&&setCursor(Qt::ArrowCursor);&&&&&&
void&MinIconWidget::enterEvent(QEvent&*event)&&&&&&
&&&&setCursor(Qt::PointingHandCursor);&&&&&&
void&MinIconWidget::mouseDoubleClickEvent(QMouseEvent&*event)&&
&&&&emit&DoubleClickedSignal();&&
void&MinIconWidget::SetPixmap(const&QPixmap&&pixmap)&&
&&&&m_Pixmap&=&&&
&&&&update();&&
class&MyLabel&:&public&QLabel&&
&&&&Q_OBJECT&&
private:&&
&&&&MinIconWidget&*m_minI&&
protected:&&
&&&&void&changeEvent(QEvent&*event);&&
&&&&MyLabel(QWidget&*parent&=&0);&&
&&&&public&slots:&&
&&&&&&&&void&ShowMainWindow();&&
&&&&&&&&void&HideMainWindow();&&
MyLabel::MyLabel(QWidget&*parent&
:&QLabel(parent)&&
&&&&m_minIcon&=&new&MinIconW&&
&&&&m_minIcon-&SetPixmap(&QPixmap("delete.png")&);&&
&&&&setWindowFlags(&Qt::WindowStaysOnTopHint&);&&
&&&&connect(m_minIcon,&SIGNAL(DoubleClickedSignal()),&this,&SLOT(ShowMainWindow()));&&
void&MyLabel::changeEvent(QEvent&*event)&&
&&&&if(event-&type()==QEvent::WindowStateChange)&&
&&&&&&&&if(windowState()&&&Qt::WindowMinimized)&&
&&&&&&&&&&&&QTimer::singleShot(0,&this,&SLOT(HideMainWindow()));&&
&&&&&&&&else&if(windowState()&&&Qt::WindowNoState)&&
&&&&&&&&&&&&QTimer::singleShot(0,&this,&SLOT(ShowMainWindow()));&&
&&&&QLabel::changeEvent(event);&&
void&MyLabel::ShowMainWindow()&&
&&&&m_minIcon-&hide();&&
&&&&move(&m_minIcon-&pos()&);&&
&&&&show();&&
&&&&setWindowState(Qt::WindowNoState);&&
void&MyLabel::HideMainWindow()&&
&&&&hide();&&
&&&&m_minIcon-&move(&pos()&);&&
&&&&m_minIcon-&show();&&
&&&&setWindowState(Qt::WindowMinimized);&&
#include&"main.moc"&&
int&main(int&argc,&char&**argv)&&
&&&&QApplication&app(argc,&argv);&&
&&&&MyLabel&&&
&&&&label.setStyleSheet("QLabel{font-size:30color:}");&&
&&&&label.resize(400,&200);&&
&&&&label.setText("This&is&a&simple&demo.");&&
&&&&label.show();&&
&&&&return&app.exec();&&
http://blog.csdn.net/small_qch/article/details/7761139
Views(...) Comments()Qt之自定义界面(二)添加最小化、关闭按钮、添加背景
在进行自定义界面之后,Qt界面并不像我们想象的那么完美,也许与我们的预期大相径庭,但是不必心烦,这只不过是迈出了第一步而已,第一步既然都已经迈出去了,那么以后的路就会好走多了!
1、自定义最小化、最大化按钮
&int width = width();//获取界面的宽度
&//构建最小化、最大化、关闭按钮
&QToolButton *minButton = new
QToolButton(this);
&QToolButton *closeButton= new
QToolButton(this);
&//获取最小化、关闭按钮图标
&QPixmap minPix& =
style()-&standardPixmap(QStyle::SP_TitleBarMinButton);
&QPixmap closePix =
style()-&standardPixmap(QStyle::SP_TitleBarCloseButton);
&//设置最小化、关闭按钮图标
&minButton-&setIcon(minPix);
&closeButton-&setIcon(closePix);
&//设置最小化、关闭按钮在界面的位置
&minButton-&setGeometry(width-46,5,20,20);
&closeButton-&setGeometry(width-25,5,20,20);
&//设置鼠标移至按钮上的提示信息
&minButton-&setToolTip(tr("最小化"));
&closeButton-&setToolTip(tr("关闭"));
&//设置最小化、关闭按钮的样式
&minButton-&setStyleSheet("background-color:");
&closeButton-&setStyleSheet("background-color:");
这样我们的最小化、最大化按钮就已经出现!
效果如下:
2、自定义背景
自定义背景可以使用多种方法,在这里我就介绍三种
(1)使用 QLable,加载图片的方式
&QLabel *background = new QLabel(this);
&//设置标签的显示图片
&background-&setPixmap(QPixmap(":/icon/login"));
&//设置背景图片的位置大小
&background-&setGeometry(0, 0,
this-&width(), this-&height());
//设置图片充满整个标签
&background-&setScaledContents(true);
(2)使用 QLable,选择背景色的方式
QLabel *background = new QLabel(this);
//设置标签的背景色为蓝色
background-&-&setStyleSheet("background-color:blue");
//设置背景标签的位置大小
background-&setGeometry(0, 0, this-&width(),
this-&height());
(3)重写void paintEvent(QPaintEvent *)
void MainWidget::paintEvent(QPaintEvent *)
&&& QBitmap
bitmap(this-&size());
bitmap.fill();
&&& QPainter
painter(&bitmap);
&&& QPixmap
pixmap(":/icons/login");
painter.drawPixmap(this-&rect(), pixmap);
这里就不演示效果了,都没问题的!
&&技术在于交流、沟通,转载请注明出处并保持作品的完整性。
&&作者:&&原文:。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

参考资料

 

随机推荐