QT 求助

syhhl007 2009-11-10 12:50:02
1.点击最小化按钮的事件是什么?
我想重写最小化的事件,实现点击最小化按钮后显示为系统托盘,我先用event->ignore()处理好像不行。

2.QTextEdit里如何高亮光标所在的一整行?
...全文
393 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yb0824 2009-11-11
  • 打赏
  • 举报
回复
http://nanzhuotong.blogspot.com/2005/08/qdialog.html
yb0824 2009-11-11
  • 打赏
  • 举报
回复
google上查的,呵呵
syhhl007 2009-11-11
  • 打赏
  • 举报
回复
的确有效,高手啊~~~
请问你是怎么查的啊,有方法嘛?
yb0824 2009-11-10
  • 打赏
  • 举报
回复
QApplication 对象调用setQuitOnLastWindowClosed( false );
yb0824 2009-11-10
  • 打赏
  • 举报
回复
等高手来了~~~
syhhl007 2009-11-10
  • 打赏
  • 举报
回复
请问这个如何解决~~

void Alarm::closeEvent(QCloseEvent *event)
{
int r=QMessageBox::information(0,"Quit",tr("确定退出?"),QMessageBox::Yes | QMessageBox::No );
if(r==QMessageBox::Yes)
{
save();
trayIcon->hide();
}
else if(r==QMessageBox::No)
{
trayIcon->show();
hide();
event->ignore();//当在只显示托盘图标的情况下,点击NO后,程序就自动结束了。可能是因为messagebox窗口关闭后会导致窗口结束。不知道如何修改。
}
}
}

如果主窗口是显示的时候(不是只有系统图盘图标情况下)点击NO后不会关闭窗口的(event->ignore()实现了),但如果只显示托盘图标的情况下就实现不了
yb0824 2009-11-10
  • 打赏
  • 举报
回复
qt 我也刚接触,很多东西都搞不清楚
Qt::DirectConnection 好像才是立即执行,Qt::QueuedConnection是放到消息队列,
syhhl007 2009-11-10
  • 打赏
  • 举报
回复
谢谢楼上的,这个可以实现最小化到系统托盘

Qt::QueuedConnection这个好像是等候消息发出成功。
请问为什么要这么做啊?
yb0824 2009-11-10
  • 打赏
  • 举报
回复
试下呢
connect(this, SIGNAL(mySignal(), this, SLOT(hide()), Qt::QueuedConnection);

void Alarm::changeEvent(QEvent *event)
{
if (event->type() == QEvent::WindowStateChange)
{
if (isMinimized())
{
emit mySignal();
event->ignore();
}
}
syhhl007 2009-11-10
  • 打赏
  • 举报
回复
貌似只有当主窗口是显示的时候event->ignore()才有效。
当只显示托盘图标时,主窗口时隐藏的,所以按NO后messagebox消失,程序也就结束了。
syhhl007 2009-11-10
  • 打赏
  • 举报
回复
我把代码修改如下,但并没有预期的效果,请看我的注释
void Alarm::changeEvent(QEvent *event)
{
if (event->type() == QEvent::WindowStateChange)
{
if (isMinimized())
{
trayIcon->show();
hide();//点击最小化后任务栏上仍然有程序的窗口图标,但由于hide了,所以点击窗口图标后看到的是白框
event->ignore();
}
}


void Alarm::closeEvent(QCloseEvent *event)
{
int r=QMessageBox::information(0,"Quit",tr("确定退出?"),QMessageBox::Yes | QMessageBox::No );
if(r==QMessageBox::Yes)
{
save();
trayIcon->hide();
}
else if(r==QMessageBox::No)
{
trayIcon->show();
hide();
event->ignore();//当在只显示托盘图标的情况下,点击NO后,程序就自动结束了。可能是因为messagebox窗口关闭后会导致窗口结束。不知道如何修改。
}
}
}

如果主窗口是显示的时候(不是只有系统图盘图标情况下)点击NO后不会关闭窗口的(event->ignore()实现了),但如果只显示托盘图标的情况下就实现不了。
Michael_Xie 2009-11-10
  • 打赏
  • 举报
回复
试试这个看看
void MainWindow::changeEvent(QEvent *event)
{
if (event->type() == QEvent::WindowStateChange)
{
if (isMinimized())
{
//...
}
}
QMainWindow::changeEvent(event);
}
yb0824 2009-11-10
  • 打赏
  • 举报
回复
http://lists.trolltech.com/qt-interest/2008-01/thread00238-0.html

16,212

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧