Qt之彈出介面顯示在父視窗中間

linkang1024發表於2018-05-09

彈出介面顯示在主視窗中間博主暫時只知道兩種方式

第一種:

    建立新的對話方塊時把父視窗的指標傳遞給對話方塊

    QNewDiglog *dlg  = new QNewDiglog(parent);

    dlg->show();

    彈出的對話方塊就會自動顯示在父視窗的中間

第二種:

    建立新對話方塊時獲取父視窗的指標,再獲取父視窗原點座標,計算顯示的位置

QWidget *widget = nullptr;
//獲取程式所有的widget
QWidgetList widgetList = QApplication::allWidgets();
//獲取父視窗指標 此處獲取objectName 可根據需求自行判斷
for(int i=0; i<widgetList.length(); i++){
    if(widgetList.at(i)->objectName() == "MainWindow"){
        widget = widgetList.at(i);
    }
}
if(widget){
//獲取父視窗geometry
    QRect rect = widget->geometry();
    //計算顯示原點
    int x = rect.x() + rect.width()/2 - this->width() /2;
    int y = rect.y() + rect.height()/2 - this->height();
    this->move(x, y);
}

以上方法適合不在父類建立對話方塊,獲取不了父視窗指標時,手動獲取父視窗指標。

寫得比較簡單有不懂的可以發郵箱linkang1024@163.com 一起交流。

相關文章