• 10446阅读
  • 4回复

有关多文档界面MDI的例子,有点不明白 [复制链接]

上一主题 下一主题
离线snow_man_0
 

只看楼主 正序阅读 楼主  发表于: 2008-03-26
— 本帖被 XChinux 执行加亮操作(2008-07-17) —
mdi例子中

void ApplicationWindow::tileHorizontal()
{
    // primitive horizontal tiling
    QWidgetList windows = ws->windowList();
    if ( !windows.count() )
    return;
   
    int heightForEach = ws->height() / windows.count();
    int y = 0;
    for ( int i = 0; i < int(windows.count()); ++i ) {
    QWidget *window = windows.at(i);
    if ( window->testWState( WState_Maximized ) ) {
        // prevent flicker
        window->hide();
        window->showNormal();
    }
    int preferredHeight = window->minimumHeight()+window->parentWidget()->baseSize().height();
    int actHeight = QMAX(heightForEach, preferredHeight);
   
    window->parentWidget()->setGeometry( 0, y, ws->width(), actHeight );//
    y += actHeight;
    }
}
-----------------------------------------------------------------------------------------------
为什么要用parentWidget(),为什么不直接用window->setGeometry( 0, y, ws->width(), actHeight );
[ 此贴被snow_man_0在2008-03-26 11:03重新编辑 ]
离线tingxx

只看该作者 4楼 发表于: 2008-03-27
QWorkspace要被 QMdiArea代替了!!
QT自带的文档真是个好东西
一定要好好看呀
离线snow_man_0

只看该作者 3楼 发表于: 2008-03-27
引用第2楼tingxx于2008-03-26 23:14发表的  :
mdiarea内只有mdisubwindow可以做为子窗体,所以当你给mdiarea加一个Qwidget的子窗体的时候,它会自动自成一个mdisubwindow来做为你的Qwidget的parent


谢谢!
看到了 http://www.qiliang.net/qt/qworkspace.html

QWorkspace详细描述

QWorkspace窗口部件提供了可以包含内部窗口(例如,多文档界面)的工作区窗口。

一个多文档界面(MDI)应用程序有一个带菜单条的主窗口。这个窗口的中央窗口部件就是一个工作区。工作区自己包含零个、一个或多个文档窗口,每个窗口显示一个文档。

工作区自己是一个普通Qt窗口部件。它有一个带父窗口部件和对象名称的标准构造函数。父对象通常使用QMainWindow,但也可以不是。

文档窗口(也就是多文档界面窗口)也是普通的Qt窗口部件,它们有一个工作区作为父窗口部件。当你在一个文档窗口上调用show()、hide()、showMaximized()、setCaption()等等,它被按你所期望的有一个框架、标题、图标和图标文本来显示、隐藏等等。你可以提供窗口部件标记来用于修饰的布局或者窗口部件自身的行为。

为了改变多文档窗口的几何形状,让这个函数调用这个窗口部件的parentWidget()是需要的,因为它将会移动或者重新定义内部窗口的大小

当一个文档窗口获得键盘焦点时,它被激活了。你可以使用setFocus()来激活它,并且用户可以用普通的移动焦点的方式来激活它。当工作区检测到激活变化时,它发射一个windowActivated()信号,并且activeWindow()函数总是返回活动的文档窗口的指针。

方便的windowList()函数返回所有的文档窗口的列表。例如,这对于在空中创建一个弹出菜单“Windows”是很有用的。

QWorkspace提供了两个内置的对子窗口的布局策略:cascade()和tile()。这两个都是槽,这样你就可以很容易地把菜单项和它们连接起来了。

如果你想让用户能够把工作的文档窗口设置的比实际工作区还大,请把scrollBarsEnabled属性设置为真。

如果顶级窗口包含一个菜单条和一个最大化的文档窗口,QWorkspace会把文档窗口的最小化、恢复和关闭按钮从文档窗口的框架上移到工作区窗口的菜单条中。然后它会在菜单条的最左面插入一个窗口操作菜单。
离线tingxx

只看该作者 2楼 发表于: 2008-03-26
mdiarea内只有mdisubwindow可以做为子窗体,所以当你给mdiarea加一个Qwidget的子窗体的时候,它会自动自成一个mdisubwindow来做为你的Qwidget的parent
QT自带的文档真是个好东西
一定要好好看呀
离线wangbenqq

只看该作者 1楼 发表于: 2008-03-26
多文档?WIDGET在window上面,这是设置widget不是设置window
快速回复
限100 字节
 
上一个 下一个