• 8894阅读
  • 1回复

无标题栏窗口 最小化问题 [复制链接]

上一主题 下一主题
离线ipal
 
只看楼主 倒序阅读 楼主  发表于: 2010-05-28
关键词: 标题栏Frameless
在linux平台下, QT编程 实现无标题栏且不能改变大小的窗口

  1. int main(int argc,  char *argv[]) {
  2.     QApplication app(arg, argv);
  3.     
  4.     QWidget *win = new QWidget;
  5.     win->setWindowFlags(Qt::WindowCloseButtonHint | Qt::FramelessWindowHint);
  6.     win->setFixedSize(320, 240);
  7.     
  8.     win->show();
  9.     
  10.     return app.exec();
  11. }


以上代码,编译运行后,可以显示 无标题栏窗口,也不能改变大小。但是 不能单击该程序所在任务栏的图标来最小化,在右击任务栏的图标,显示菜单中,最小化不可用,关闭可以使用。

如果 在代码中添加 Qt::WindowMinimizeButtonHint 后, 那么编译运行后,却会显示 只带有 最小化 按钮的标题栏窗口。

所以,想问一下,怎么修改代码,才能 在显示无标题栏且大小固定的 窗口的条件下 单击相应任务栏图标来最小化?
离线unitcode

只看该作者 1楼 发表于: 2010-05-29
我通常的做法是:

建立一个系统托盘QSystemTrayIcon,实现右键弹出式菜单,菜单中有一项为Show/Hide。然后:

void MyWidget::createAction()
{
...
showHideAction=new QAction(tr("ShowMainWindow"),this);
showHideAction->setShortcut(tr("F4"));    // 在这里还可以设置相应的快捷键哦!
connect(showHideAction, SIGNAL(triggered()), this, SLOT(showHideMyWidget()));
...
myMenu->addAction(showHideAction);
}

......
void MyWidget::showHideMyWidget()
{
    if (isVisible()) {
        hide();
        showHideAction->setText(tr("Show"));
    } else {
        show();
        activateWindow();
        showHideAction>setText(tr("Hide"));
    }
}

更多可以查看:void QWidget::show ()   [slot]  
                            void QWidget::hide ()   [slot]
                            bool    isVisible () const
都是QWidget提供的成员函数。
快速回复
限100 字节
 
上一个 下一个