如何添加另一个与第一个完全相同的选项卡(如在浏览器中)?

时间:2011-09-03 13:24:54

标签: qt

我有一个用Qt制作的浏览器,我有一个带有一个标签的tabwidget(有标签,lineedit和webview)。我想添加其他看起来像第一个的(有标签,lineedit和webview)。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我不知道有什么方法可以“克隆”或复制现有的标签或小部件,所以我相信你需要自己编写标签内容(即不通过设计师)。

如果您只需要QLabel,QLineEdit和QWebView,那就不是很复杂了。这个想法是:

  • 创建自定义窗口小部件(直接从QWidget继承,或从QFrame继承)
  • 在构造函数
  • 中以您想要的方式布置包含的小部件
  • 根据需要,通过QTabWidget.addTab功能添加任意数量的标签。

Tab Dialog示例包含您需要的所有内容 - 它实际上比您需要的更复杂,因为它为每个选项卡使用不同的小部件。你可以使用一个小部件。

如果您想知道如何进行布局,并且对设计器的内容感到满意,则可以检查生成的(.moc)文件。您将看到它使用的布局,您可以在自己的代码中复制它。

Skeleton widget:

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也应该是一个插槽),但这应该让你开始。