2017-06-06 239 views
2

我有一個uiQButtonQLabel。我希望QLabel在我的筆記本電腦上全屏顯示,只要按下該按鈕即可。Qt - 如何在我的筆記本電腦上以全屏顯示QLabel?

我嘗試下面的代碼:

void MainWindow::on_fullScreenBtn_clicked() 
{ 
    ui->myImage->setText("going full screen"); 
    ui->myImage->showMaximized(); 
    ui->myImage->QWidget::showFullScreen(); 
} 

我可以看到這個功能得到執行,但是這並不能全屏顯示我的標籤。我做錯了什麼/缺少什麼?

我正在使用QtCreator 3.5.1,並使用內置的圖形界面讓我的GUI。

編輯:變量MYIMAGE是包含圖像

+0

請參考[參考]並閱讀[問]。正如所寫,完全不清楚,你正在努力完成什麼。代碼和問題文本看起來不匹配。 – IInspectable

+2

@Inspectable我很抱歉,但我不明白我的頭銜可能會更清楚......要麼你不熟悉Qt,要麼這是個玩笑。 – dratroticu

+1

目前還不清楚,例如,'ui-> myImage'是什麼。目前還不清楚,什麼'ui-> myImage-> QWidget :: showFullScreen();'試圖完成。此外,問題是缺少[mcve]。 – IInspectable

回答

5

的問題是,你的QLabel是另一個部件的一部分,因此,由於默認Qt::Widget標誌顯示爲子部件來代替:

This is the default type for QWidget . Widgets of this type are child widgets if they have a parent, and independent windows if they have no parent. See also Qt::Window and Qt::SubWindow.

因此,解決的辦法是改變標誌如下手動Qt::Window

ui->myImage->setWindowFlag(Qt::Window); 

預Qt的5.9的用戶可以使用以下:

ui->myImage->setWindowFlags(ui->myImage->windowFlags() | Qt::Window); 

注意,你應該叫showFullScreen你設置的窗口標誌爲documented by Qt後:

Note: This function calls setParent() when changing the flags for a window, causing the widget to be hidden. You must call show() to make the widget visible again..

撤消最大化

窗口標誌應刪除撤消最大化。這是可以做到如下:

ui->myImage->setWindowFlag(Qt::Window, false); 
ui->myImage->show(); 

前的Qt 5.9的用戶可以使用以下命令:

ui->myImage->setWindowFlags(ui->myImage->windowFlags() & ~Qt::Window); 
ui->myImage->show(); 

注意,是需要show呼叫如上指出。

+0

我明白你的意思了,但不幸的是,這給出了以下編譯錯誤:'class QLabel'沒有名爲'setWindowFlag'的成員 – dratroticu

+0

您爲5.9版本提出的變體不適用於我。仍然給出了同樣的錯誤。 – dratroticu

+0

同樣的錯誤是不可能的,因爲我使用另一個成員,即setWindowFlag __s__而不是setWindowFlag。 – m7913d

-1

你叫展會上您的主窗口實例()方法,在主函數QLabel?類似的東西:

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow window; 

    window.showMaximized(); 

    return a.exec(); 
} 
+0

是的,我確實調用了show()函數。但我希望這個標籤只能在按下按鈕後才能填滿整個屏幕。我的猜測是你在這裏發佈的代碼沒有考慮到這一點。 – dratroticu

+0

我想我誤解了你寫的東西。我瞭解你的標籤根本沒有顯示。我的錯誤 –

1

的showMaximized和showFullScreens上一個QWidget的工作,有父(即是實際的窗口,不包含小部件)。所以你的代碼有幾個不同的選項。

1 - 創建QStackedLayout或QStackedWidget與你QLabel,當你觸發你的插槽,這樣做:

void MainWindow::on_fullScreenBtn_clicked() 
{ 
    ui->stackedWidget->setCurrentIndex(indexOfTheLabel); 
} 

這將使標籤把整個屏幕。

2 - 您也可以刪除QLabel的父項,但這會產生一個複雜的混亂,所以,不要。

void MainWindow::on_fullScreenBtn_clicked() 
{ 
    ui->myImage->setParent(nullptr); 
    ui->myImage->setText("going full screen"); 
    ui->myImage->showMaximized(); 
    ui->myImage->showFullScreen(); 
} 

不要做第二個。

+0

請提一下爲什麼不應該使用最後一種方法:將父項設置爲'nullptr'將(可能)導致內存泄漏,因爲您將對象所有權樹更改爲不良副作用。 – m7913d

+0

它也打破了佈局,您必須稍後手動重新將其插入佈局。 –

相關問題