2013-05-16 14 views
2

我有幾個可停靠小部件,用戶可以將其移動到屏幕的任何地方。 有時,如果用戶拖出可視區域,則無法將其恢復。把可停靠小部件的默認位置在Qt的

有什麼辦法來恢復Qt中的小部件的位置,默認位置?

回答

1

將Widget位置存儲在註冊表中。安裝時有默認設置並保存屏幕幾何圖形。例如:

QSettings settings; 
    settings.beginGroup("MainWindow"); 
    settings.setValue("MRU", m_RecentFiles); 
    settings.setValue("maximized", isMaximized()); 
    settings.setValue("minimized", isMinimized()); 
    if(!isMaximized()) 
    { 
     settings.setValue("size", size()); 
    } 

    QByteArray array = saveState(); 
    settings.setValue("state", array); 

    QDesktopWidget desktopWidget; 
    int nb = desktopWidget.numScreens(); 
    settings.setValue("screenNumber", nb); 
    for(int i = 0; i < nb; ++i) 
    { 
     YString screenName = "screen" + YString::number(i); 
     QRect rect = desktopWidget.screenGeometry(i); 
     settings.setValue(screenName.data(), rect); 
    } 
1

您可以使用QMainWindow::saveState()QMainWindow::restoreState()方法。

saveState返回一個QByteArray,其中包含主窗口的內部狀態,包括停靠區域的停靠窗口小部件的狀態和位置。例如,您可以將此陣列保存在文件中,稍後通過調用restoreState()來恢復內容。

如果你想有一個默認位置,然後根據你的喜好定位dock widgets,默認情況下,它會檢索字節數組(例如通過一些只在你的應用程序的調試模式下可用的動作)將數組硬編碼到您的源代碼或某個默認配置文件中,然後通過簡單地將此數組傳遞給restoreState()方法來實現某種「重置」或「設置默認值」操作。

+1

我懷疑這種方法是否適用於多個屏幕 – Hariprasad

+0

好點,實際上 - 我還沒有測試過這個... –

0

一般來說,你只需要添加一個檢查到該測試QWidgets位置,然後決定是否需要移動部件回到屏幕上的mouseMoveEvent