Qt 如何添加与第一个选项卡完全相同的另一个选项卡(类似于浏览器)?
我有一个Qt浏览器和一个tabwidget,它有一个标签、lineedit和webview。我想添加其他看起来像第一个标签,线编辑和网络视图Qt 如何添加与第一个选项卡完全相同的另一个选项卡(类似于浏览器)?,qt,Qt,我有一个Qt浏览器和一个tabwidget,它有一个标签、lineedit和webview。我想添加其他看起来像第一个标签,线编辑和网络视图 我怎样才能做到这一点?我不知道如何克隆或复制现有的选项卡或小部件,因此我相信您需要自己编写选项卡内容代码,也就是说,不需要通过设计器 如果您只需要一个QLabel、一个QLineEdit和一个QWebView,那么这并不复杂。其想法是: 创建直接从QWidget或从QFrame继承的自定义小部件 以您希望的方式在其构造函数中布局包含的小部件 通过QTabW
我怎样才能做到这一点?我不知道如何克隆或复制现有的选项卡或小部件,因此我相信您需要自己编写选项卡内容代码,也就是说,不需要通过设计器 如果您只需要一个QLabel、一个QLineEdit和一个QWebView,那么这并不复杂。其想法是: 创建直接从QWidget或从QFrame继承的自定义小部件 以您希望的方式在其构造函数中布局包含的小部件 通过QTabWidget.addTab函数,在需要时添加任意数量的选项卡。 这个例子有你所需要的一切——它实际上比你所需要的更复杂,因为它为每个选项卡使用不同的小部件。你只需要一个小部件就可以脱身 如果您想知道如何进行布局,并且对从设计器获得的内容感到满意,则可以检查生成的.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可能也应该是一个插槽,但这应该让您开始。我不知道任何方法来克隆或复制现有的选项卡或小部件,因此我相信您需要自己编写选项卡内容,即不通过设计器 如果您只需要一个QLabel、一个QLineEdit和一个QWebView,那么这并不复杂。其想法是: 创建直接从QWidget或从QFrame继承的自定义小部件 以您希望的方式在其构造函数中布局包含的小部件 通过QTabWidget.addTab函数,在需要时添加任意数量的选项卡。 这个例子有你所需要的一切——它实际上比你所需要的更复杂,因为它为每个选项卡使用不同的小部件。你只需要一个小部件就可以脱身 如果您想知道如何进行布局,并且对从设计器获得的内容感到满意,则可以检查生成的.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可能也应该是一个插槽,但这应该让您开始。这是一个很难回答的问题,因为您不知道如何实现第一个选项卡。我设计的第一个标签没有为它编写代码,这是一个很难回答的问题,因为我不知道第一个标签是如何实现的。通常的做法是做与第一个完全相同的事情。我设计的第一个没有为它编写代码