2011-09-03 66 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可能应该是一个插槽太),但这应该让你开始。

相关问题