我想在一個繼承自QMdiSubWindow的界面上實作一個垂直的布局,代碼實作很簡單,但實際運行結果卻失敗了。以下是測驗代碼。
ContentWindowCL::ContentWindowCL(QWidget *parent):
QMdiSubWindow(parent)
{
setAttribute(Qt::WA_DeleteOnClose);
setWindowTitle("aaaaa");
setObjectName("content");
resize(200,300);
//第1種情況:這樣創建的三個部件可以正常布局
// QWidget *titleBarM = new QWidget();
// titleBarM->setStyleSheet("background:green");
// QWidget *toolBarM = new QWidget();
// toolBarM->setStyleSheet("background:yellow");
// QWidget *toolBoxM = new QWidget();
// toolBoxM->setStyleSheet("background:red");
//第2種情況:直接繼承自QWidget,帶有UI檔案,
// CrTitleBarCL *titleBarM = new CrTitleBarCL();
// titleBarM->setStyleSheet("background:green");
// CrToolBarCL *toolBarM = new CrToolBarCL();
// toolBarM->setStyleSheet("background:yellow");
// CrToolBoxCL *toolBoxM = new CrToolBoxCL();
// toolBoxM->setStyleSheet("background:red");
//第3種情況:直接繼承QWidget ,沒有UI檔案
aaa *titleBarM = new aaa();
titleBarM->setStyleSheet("background:green");
bbb *toolBarM = new bbb();
toolBarM->setStyleSheet("background:yellow");
ccc *toolBoxM = new ccc();
toolBoxM->setStyleSheet("background:red");
QLayout *mainLayout = this->layout();
mainLayout->setMargin(2);
mainLayout->setSpacing(2);
mainLayout->addWidget(titleBarM);
mainLayout->addWidget(toolBarM);
mainLayout->addWidget(toolBoxM);
}
第一種情況運行結果

第2,3種的自定義類里我沒有添加任何代碼,運行的結果

為什么會有這種差別呢??
上層是這樣處理的: mdiArea = new QMdiArea();
QMainWindow->setCentralWidget(mdiArea);
contentWindow = new ContentWindowCL();
mdiArea->addSubWindow(contentWindow);
我想自定義三個視窗,讓他們在QMdiSubWindow中垂直顯示。用了所有我能想到的辦法,在嘗試了所有我能想到的布局辦法之后,信心滿滿 用了一個繼承自QFrame的部件來當做QMdiArea的子視窗,但是仍然無法實作垂直布局。問題出在什么地方呢????
各位大哥幫忙分析一下,多謝多謝。
uj5u.com熱心網友回復:
布局和樣式表沒什么相互影響吧。你把樣式表放到自定義類里面試試。
uj5u.com熱心網友回復:
不行 感覺三個QWidget的派生類似乎沒有顯示出來,
如果我在派生類的UI里加些button控制元件,到是能顯示出來,可是卻沒有布局的效果,
似乎在QT4里樣式表要作用于QWidget的派生類時,需要重寫paintEvent函式。
那么對于布局是不是也有類似的處理呢??不知道是否需要多載QWidget的函式,諸如sizeHint()之類的。
uj5u.com熱心網友回復:
布局和派生沒關系。你列印一下,看看控制元件的位置到底在哪里。
uj5u.com熱心網友回復:
我個人就覺得QT布局是垃圾,還不如自己寫事件改位置uj5u.com熱心網友回復:
我個人就覺得QT布局是垃圾,還不如自己寫事件改位置
布局很好用啊,何出此言呢?
uj5u.com熱心網友回復:
我個人就覺得QT布局是垃圾,還不如自己寫事件改位置
布局很好用啊,何出此言呢?
可能我新手吧,大神,請問這種布局咋整
uj5u.com熱心網友回復:
我個人就覺得QT布局是垃圾,還不如自己寫事件改位置
布局很好用啊,何出此言呢?
可能我新手吧,大神,請問這種布局咋整

uj5u.com熱心網友回復:
繼承自 QWidget 的子類加一句this->setAttribute(Qt::WA_StyledBackground,true);
試試
uj5u.com熱心網友回復:
繼承自 QWidget 的子類加一句
this->setAttribute(Qt::WA_StyledBackground,true);
試試
這個意思是使用css布局嗎?
我這樣寫了
PushButton->setAttribute(Qt::WA_StyledBackground,true);
PushButton->setStyleSheet("margin:0px auto;");
醬子好像沒用
uj5u.com熱心網友回復:
繼承自 QWidget 的子類加一句
this->setAttribute(Qt::WA_StyledBackground,true);
試試
這個意思是使用css布局嗎?
我這樣寫了
PushButton->setAttribute(Qt::WA_StyledBackground,true);
PushButton->setStyleSheet("margin:0px auto;");
醬子好像沒用
這個是回樓主的
你的那個圖,
整體垂直布局,上面一個QWidget,底部是QGridLayout,分3個格。
第一格QLabel, 第二格按鈕,第三格空白QLabel
uj5u.com熱心網友回復:
為要布局的視窗創建一個垂直布局QVBoxLayout,(水平布局為QHBoxLayout)。如:QVBoxLayout *verticalLayout = new QVBoxLayout(this); //this為要布局的視窗
QWidget *widget1 = new QWidget(this);
QWidget *widget2 = new QWidget(this);
verticalLayout->addWidget(widget1 );
verticalLayout->addWidget(widget1 );
同時,如果需要可以呼叫QWidget的setMinimumSize、setMaximumSize方法設定視窗最小、最大尺寸,以及其它方法。
uj5u.com熱心網友回復:
繼承自 QWidget 的子類加一句
this->setAttribute(Qt::WA_StyledBackground,true);
試試
這個意思是使用css布局嗎?
我這樣寫了
PushButton->setAttribute(Qt::WA_StyledBackground,true);
PushButton->setStyleSheet("margin:0px auto;");
醬子好像沒用
這個是回樓主的
你的那個圖,
整體垂直布局,上面一個QWidget,底部是QGridLayout,分3個格。
第一格QLabel, 第二格按鈕,第三格空白QLabel
謝謝,這個我知道了。不過如果把左下角那個標簽的sizePolicy設定成Fixed,好像按鈕就會靠過來,此時按鈕就不在中間了,如果用伸縮因子的話,那也需要自己調整寬度或寫代碼調吧,不過這樣的話,感覺就不算是用Qt布局功能布局了,到頭來,還要用手調
uj5u.com熱心網友回復:
繼承自 QWidget 的子類加一句
this->setAttribute(Qt::WA_StyledBackground,true);
試試
這個意思是使用css布局嗎?
我這樣寫了
PushButton->setAttribute(Qt::WA_StyledBackground,true);
PushButton->setStyleSheet("margin:0px auto;");
醬子好像沒用
這個是回樓主的
你的那個圖,
整體垂直布局,上面一個QWidget,底部是QGridLayout,分3個格。
第一格QLabel, 第二格按鈕,第三格空白QLabel
謝謝,這個我知道了。不過如果把左下角那個標簽的sizePolicy設定成Fixed,好像按鈕就會靠過來,此時按鈕就不在中間了,如果用伸縮因子的話,那也需要自己調整寬度或寫代碼調吧,不過這樣的話,感覺就不算是用Qt布局功能布局了,到頭來,還要用手調
為什么SizePolicy要設定Fixed呢? 如果一定要設的話也好解決。
第一格里面加一個水平布局, 水平布局里加兩個QLabel, 第一個SizePolicy 為 Fixed, 第二個空白,充當 SpacerItem
uj5u.com熱心網友回復:
繼承自 QWidget 的子類加一句
this->setAttribute(Qt::WA_StyledBackground,true);
試試
這個意思是使用css布局嗎?
我這樣寫了
PushButton->setAttribute(Qt::WA_StyledBackground,true);
PushButton->setStyleSheet("margin:0px auto;");
醬子好像沒用
這個是回樓主的
你的那個圖,
整體垂直布局,上面一個QWidget,底部是QGridLayout,分3個格。
第一格QLabel, 第二格按鈕,第三格空白QLabel
謝謝,這個我知道了。不過如果把左下角那個標簽的sizePolicy設定成Fixed,好像按鈕就會靠過來,此時按鈕就不在中間了,如果用伸縮因子的話,那也需要自己調整寬度或寫代碼調吧,不過這樣的話,感覺就不算是用Qt布局功能布局了,到頭來,還要用手調
為什么SizePolicy要設定Fixed呢? 如果一定要設的話也好解決。
第一格里面加一個水平布局, 水平布局里加兩個QLabel, 第一個SizePolicy 為 Fixed, 第二個空白,充當 SpacerItem
加個標簽這方法我上次弄出來了,大佬都這樣說,那QT應該也沒解決方法了,就這樣子吧。謝謝大佬了!
uj5u.com熱心網友回復:
QT+web做界面吧,QT原生的布局不想吐槽,沒見過這么爛的設計 Android html IOS 都是比QT強,QT布局(垂直布局 水平布局...)不能設定背景,不知道哪個薩比想出來的,基礎的布局連個設定背景的功能沒設計 拿出來說有多牛鼻 有多牛鼻的,轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/75633.html
標籤:Qt
上一篇:安卓otg手機接usb攝像頭驅動
