2011-09-03 65 views
0

我有一個用Qt製作的瀏覽器,並且我有一個tabwidget(帶有一個標籤,lineedit和webview)。我想添加看起來像第一個(有標籤,lineedit和webview)的其他人。如何添加另一個與第一個標籤完全相同的標籤(如在瀏覽器中)?

我怎樣才能做到這一點?

+0

這是一個棘手的問題,不知道你如何實現第一個標籤。做別人的慣常做法與第一種做法完全相同。 – Mat

+0

以及我設計的第一個它沒有寫代碼 – Andrew

回答

0

我不知道有什麼方法可以「克隆」或複製現有的選項卡或控件,所以我相信您需要自己編寫選項卡內容(即不通過設計器)。

如果你只需要一個QLabel,一個QLineEdit和一個QWebView,那不是很複雜。該想法是:

  • 創建一個自定義窗口小部件(直接從QWidget繼承,或從QFrame
  • 在時尚鋪陳包含的部件要在它的構造
  • 添加儘可能多的標籤爲你想,當你想要他們,通過QTabWidget.addTab功能。

Tab Dialog示例具有您需要的所有內容 - 它實際上比您需要的更復雜,因爲它爲每個選項卡使用不同的小部件。你可以逃脫一個小部件。

如果您想知道如何進行佈局,並且您對設計師的設計感到滿意,則可以檢查生成的(.moc)文件。你會看到它使用的是什麼佈局,你可以在你自己的代碼中複製它。

骨架部件:

class BrowserTab : public QWidet 
{ 
    Q_OBJECT 

public: 
    BrowserTab(QUrl const& home, QWidget *parent = 0); 
    void setUrl(QUrl const& url); 

private: 
    QWebView *web; 
    QLabel *title; 
    QLineEdit *urlEdit; 
}; 


BrowserTab::BrowserTab(QUrl const& home, QWidget *parent) 
    : QWidget(parent) 
{ 
    urlEdit = new QLineEdit(this); 
    title = new QLabel(this); 
    web = new QWebView(this); 

    QVBoxLayout *vl = new QVBoxLayout; 
    vl->addLayout(title); 
    vl->addLayout(urlEdit); 
    vl->addLayout(web); 
    setLayout(vl); 

    setUrl(home); 
} 

void BrowserTab::setUrl(QUrl const& url) 
{ 
    web->load(url); 
    // update label & urlEdit here 
} 

你需要多做一點,使之成爲正確的瀏覽器(setUrl可能應該是一個插槽太),但這應該讓你開始。

相關問題