2011-05-26 711 views
2

我有QDialog是嚴重的設計與QDesigner,我看到了,我可以像這樣的代碼添加QStatusBar網站:的Qt:如何實現QDialog的狀態欄

#include <QDialog> 
#include <QStatusBar> 
#include <QLayout> 
#include <QApplication> 
#include <QTextEdit> 
#include <QStatusTipEvent> 

class Dialog : public QDialog { 
public: 
Dialog() : QDialog(){ 
QLayout *l = new QVBoxLayout(this); 
QTextEdit *te = new QTextEdit; 
te->setStatusTip("XXX"); 
l->addWidget(te); 
bar = new QStatusBar; 
l->addWidget(bar); 
l->setMargin(0); 
l->setSpacing(0); 
} 
private: 
QStatusBar *bar; 
protected: 
bool event(QEvent *e){ 
if(e->type()==QEvent::StatusTip){ 
QStatusTipEvent *ev = (QStatusTipEvent*)e; 
bar->showMessage(ev->tip()); 
return true; 
} 
return QDialog::event(e); 
} 
}; 

int main(int argc, char **argv){ 
QApplication app(argc, argv); 
Dialog dlg; 
return dlg.exec(); 
} 

它甚至沒有我的情況下工作。 。也許QDialog已經有幾個持有小部件的layets。

我的問題是我可以怎樣在QDesigner中使用palceholder,或者以某種方式宣傳那個放置QStatusbar類的widget嗎?我不知道...

我能在這種情況下做什麼?我可以實施新的QStatusbar嗎?

感謝

回答

7

,當你說這是行不通的,你沒有看到狀態欄,當你運行我相信。

我看不出有什麼辦法可以在設計師中完全做到這一點。設計師當然會抵制推銷東西到QStatusBar的想法。我想你可以欺騙設計師,繼承QStatusBar,然後將QWidget推廣到你的子類。

但我認爲我們不需要去那條路線。我認爲對上面的代碼進行一些調整應該有所幫助。

在設計器中,在對話框的底部添加一個佈局,它與什麼類型無關。我稱之爲'StatusBarLayout'。你可以看到佈局(紅色框在底部壓扁)。我刪除了對話框中的底部邊距,以便狀態欄在底部齊平。

enter image description here

現在大約佈局l以上代碼中刪除一切,只是這樣做:

bar = new QStatusBar(this); 
pUI->StatusBarLayout->addWidget(bar); 
pUI->textEdit->setStatusTip("XXX"); 

textEdit是一些在設計中添加。現在,當你運行它,你應該看到這一點:

enter image description here

我希望幫助

編輯:

您也可以設定爲在設計各種小部件的狀態提示過,所以有沒有必要在代碼中這樣做,除非你想。

+0

我做了什麼,我只是把小工具的地方持有人放在設計師,並在代碼中我只是將其刪除並更換狀態欄 – user63898 2011-05-27 02:37:54

4

嘗試添加QStatusBar這樣的:

QDialog dialog; 
QLayout* layoutWidget = new QVBoxLayout(&dialog); 
layoutWidget ->addWidget(new QTextEdit); 
QStatusBar* statusBar = new QStatusBar; 
layoutWidget ->addWidget(statusBar); 
+0

我有問題,我所有的gui都已經在QtDesigner中完成了,我如何將StatusBar與QDesigner放在一起?我可以放置Widget佔位符,然後創建我的StatusBar並與設計者一起推廣它? – user63898 2011-05-26 11:25:49