0
我有一個QGraphicsView子類,在項目的上下文菜單上,我想顯示一個屬性對話框。如何在QGraphicsView的中心顯示QDialog?
我想在視圖中居中對話框......
正如我現在,沒有父,它在屏幕中央顯示。
MyView::MyView(QWidget *parent) : QGraphicsView(parent) {}
void MyView::showProperties()
{
TabDialog *tabDialog = new TabDialog(); // shows in center of screen
// TabDialog *tabDialog = new TabDialog(this); // doesn't show at all
// TabDialog *tabDialog = new TabDialog((QWidget*)this->parent()); // doesn't show at all
tabDialog->setWindowFlags(Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint);
tabDialog->exec();
delete tabDialog;
}
視圖被放置在一個組框...所以父是組框...
怎麼能叫我用父母的對話?
隨着這一變化,我的窗口仍然會顯示在窗口的中心,不在QGraphicsView之上。 – Thalia
@Thalia這是預期的行爲。如果您希望將它精確地顯示在頂層窗口的子窗口小部件的中心,就像我現在假定的那樣,您需要手動進行定位。但請注意,模態對話在不同平臺上的行爲不同,因此您的位置選擇可能不合適或被忽略。例如,在Mac上,模式對話框顯示爲從窗口的標題欄放下的工作表 - 因此,您希望將其放在其他位置並不重要,它對於平臺來說看起來不太合適,並且默認情況下您的定位選擇被忽略。 –
@Thalia對話框的手動定位不是微不足道的,除非對話框的大小是固定的,因爲在顯示對話框的大小之前,對話框的大小是未知的,所以一旦事件循環處理完所有與事件相關的事件,就需要激活定位代碼到對話的可見性變化。這裏的確切行爲恐怕會非常依賴於平臺,所以這是否值得嘗試。您一定想在您定位的所有平臺上進行測試。 –