苹果手机官网idid登陆不了

1498人阅读
技术(63)
最近在使用QTabWidget控件的时候发现,QTabWidget控件的addTab(pWidget, &myTab&)方法会改变pWidget控件原有父子关系,因为这个问题,害我找了半天,我本意是想通过pWidget-&parent()获取pWidget的父指针,但是由于addTab会改变pWidget的原来的父子关系,导致找不到原来的父指针,下面我们来看看addTab是怎么来改变这个父指针的:
首先看一段简单的应用代码:
#ifndef _INFO_H
#define _INFO_H
#include &QtGui&
class CInfo1 : public QWidget {
CInfo1(QWidget *parent) : QWidget(parent)
void getResult();
class CInfo2 : public QWidget {
CInfo2(QWidget *parent) : QWidget(parent)
void getResult();
class CInfo : public QTabWidget {
CInfo(QWidget *parent = NULL) : QTabWidget(parent)
pInfo1 = new CInfo1(this);
pInfo2 = new CInfo2(this);
addTab(pInfo1, &info1&);
addTab(pInfo2, &info2&);
a = <span style="color:#;
b = <span style="color:#;
qDebug() && a && b;
CInfo1 *pInfo1;
CInfo2 *pInfo2;
#include &info.h&
void CInfo1::getResult()
CInfo *pInfo = (CInfo *)parent();
qDebug() && pInfo-&a && pInfo-&b;
void CInfo2::getResult()
CInfo *pInfo = (CInfo *)parent();
qDebug() && pInfo-&a && pInfo-&b;
int main(int argc, char *argv[])
QApplication a(argc, argv);
info.pInfo1-&getResult();
info.pInfo2-&getResult();
info.show();
return a.exec();
从上面的代码若父指针没有更改,则会打印出三行:
而事实的打印却是:
X是一个随机数,从而我们不难发现,getResult()函数里的parent()已不是指向info对象了,接下来我们看看到底addTab是怎么改变父指针的,看一下调用关系:
addTab(pInfo1, &info1&);
int QTabWidget::addTab(QWidget *child, const QString &label)
return insertTab(-<span style="color:#, child, label);
int QTabWidget::insertTab(int index, QWidget *w, const QIcon& icon, const QString &label)
Q_D(QTabWidget);
return -<span style="color:#;
index = d-&stack-&insertWidget(index, w);
d-&tabs-&insertTab(index, icon, label);
setUpLayout();
tabInserted(index);
int QStackedWidget::insertWidget(int index, QWidget *widget)
return d_func()-&layout-&insertWidget(index, widget);
int QStackedLayout::insertWidget(int index, QWidget *widget)
Q_D(QStackedLayout);
addChildWidget(widget);
index = qMin(index, d-&list.count());
if (index & <span style="color:#)
index = d-&list.count();
QWidgetItem *wi = QLayoutPrivate::createWidgetItem(this, widget);
d-&list.insert(index, wi);
invalidate();
if (d-&index & <span style="color:#) {
setCurrentIndex(index);
if (index &= d-&index)
&#43;&#43;d-&
if (d-&stackingMode == StackOne)
widget-&hide();
widget-&lower();
void QLayout::addChildWidget(QWidget *w)
QWidget *mw = parentWidget();
QWidget *pw = w-&parentWidget();
//Qt::WA_LaidOut is never reset. It only means that the widget at some point has
//been in a layout.
if (pw && w-&testAttribute(Qt::WA_LaidOut)) {
QLayout *l = pw-&layout();
if (l && removeWidgetRecursively(l, w)) {#ifdef QT_DEBUG
if (layoutDebug())
qWarning(&QLayout::addChildWidget: %s \&%s\& is already in a
moved to new layout&,
w-&metaObject()-&className(), w-&objectName().toLocal8Bit().data());#endif
if (pw && mw && pw != mw) {#ifdef QT_DEBUG
if (layoutDebug())
qWarning(&QLayout::addChildWidget: %s \&%s\& in wrong
moved to correct parent&,
w-&metaObject()-&className(), w-&objectName().toLocal8Bit().data());#endif
pw = <span style="color:#;
bool needShow = mw && mw-&isVisible() && !(w-&isHidden() && w-&testAttribute(Qt::WA_WState_ExplicitShowHide));
if (!pw && mw)
w-&setParent(mw);
w-&setAttribute(Qt::WA_LaidOut);
if (needShow)
QMetaObject::invokeMethod(w, &_q_showIfNotHidden&, Qt::QueuedConnection); //show later
从调用栈(注意红色代码)发现,最终addTab会调用addChildWidget,在w-&setParent会将pWidget的父指针更改,哈哈,终于水落石出了。&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:80630次
积分:1174
积分:1174
排名:千里之外
原创:37篇
转载:29篇
评论:37条
(1)(5)(13)(1)(1)(1)(2)(1)(4)(2)(2)(4)(3)(12)(1)(4)(8)(2)的QTabWidget 滑动效果的一个展示
的QTabWidget 滑动效果的一个展示
所属分类:
下载地址:
Qt tabwidget滑动.zip文件大小:9.08 kB
分享有礼! 》
请点击右侧的分享按钮,把本代码分享到各社交媒体。
通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。
这是一款基于Qt的QTabWidget的一个页面滑动效果的, 源码, 当点击wdiget的按钮后, 进行滑动切换窗口, 滑动效果十分的漂亮并且十分的连贯, 适合初学者, 和大成者, 并且上面添加了日历的一些控件, 代码进行了日历的处理。 可以把内部代码拿下来, 并且改装成wiedet界面滑动效果, 都是可以的,& 需要的请下载。
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
536.00 B 14:46
368.00 B 14:46
3.84 kB 14:45
789.00 B 14:45
diqf.pro471.00 B 14:44
diqf.pro.user13.28 kB 14:49
diqf.pro.user.2.7pre117.01 kB 14:23
183.00 B 12:44
235.00 B 12:52
317.00 B 12:52
mainwindow.ui6.63 kB 14:42
(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
评价成功,多谢!
下载Qt tabwidget滑动.zip
CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了
您的积分不足,优惠套餐快速获取 30 积分
10积分 / ¥100
30积分 / ¥200原价 ¥300 元
100积分 / ¥500原价 ¥1000 元
订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。
支付宝支付宝付款
微信钱包微信付款
更多付款方式:、
您本次下载所消耗的积分将转交上传作者。
同一源码,30天内重复下载,只扣除一次积分。
鲁ICP备号-3 runtime:Elapsed:88.431ms - init:0.1;find:1.0;t:0.5;tags:0.2;related:40.0;comment:0.2; 27.69
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
^_^"呃 ...
Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧QTabwidget 中QTabbar的风格设置问题 - QTCN开发网 - Powered by phpwind
查看完整版本: [--
QTabwidget 中QTabbar的风格设置问题
我做了一个QTabwidget,设置了4个标签,我现在想让每个标签用单独的背景图片来填充我现在已经做到了让同一个背景图来填充的QTabbar这个类,但是我不知道应该怎么单独给他们设置图片呢?我把我实现的方法给大家看下,不知道有没有高手能解决我的问题,谢谢QTabWidget *tabview = new QTabWidget(win);tabview-&setStyleSheet(&QTabWidget::pane{border-width:0}\& & & & & & QTabWidget::tab-bar{border-width:0}\& & & & & & QTabBar::tab {background-image: url(:/OK/skins/tab button.png);\& & & & & & border-bottom-color: #C2C7CB;\& & & & & & border-top-left-radius: 0\& & & & & & border-top-right-radius: 0\& & & & & & min-width: 140min-height: 116\& & & & & & padding: 0\& & & & }\& & & & \& & & & QTabBar::tab:!selected {\& & & & & & margin-top: 0\& & & & }\& & & & QTabBar::tab:selected {\& & & & background-image: url(:/OK/skins/musicselect.png);\& & & & }\& & & & QTabBar::tab:first:selected {\& & & & & & margin-left: 0;\& & & & }\& & & & QTabBar::tab:last:selected {\& & & & & & margin-right: 0;\& & & & }\& & & & QTabBar::tab:only-one {\& & & & & & margin: 0;\& & & & }&);
哎,论坛无高人?
最近我也想了解这个,单独设置标签风格
获得单独的指针,一个 一个用stylesheet设置
能否贴段获取指针的代码出来看看呢?我相信这样会帮了很多人不过有一种情况是,就算获取了指针,那个标签类不是QWidget的子类,不一定有setStyleSheet()这个成员函数
肯定是QWidget的类的,不是QWidget的子类是无法显示的。QTabBar应该是整个栏,而不是一个标签,看了QTabWidget的源码发现实际上它只有一个QTabBar指针。一直以为一个标签就是一个QTabBar,实际上应该是n个标签也是一个QTabBar。QTabBar是QTabWidget中所有标签的组合。函数QTabBar* QTabWidget::tabBar()可以获得QTabBar的指针,但是这个函数是保护的,所以必须要继承一次QTabWidget才可以获得这个指针。获得QTabWidget的指针后用at(int index)应该可以获得单个的指针
我试过n种方法了我想你把“标签”和“标签栏”两个概念弄乱了我是说单个标签不是QWidget的子类,并不是说QTabBar不是QWidget的子类其实仔细研究一下QTabBar就会发现很多奇怪的事情,例如:创建一个tabBar,然后addTab一次,然后用以下代码&#160;&#160;&#160;&#160;tabBar-&setTabsClosable(true);&#160;&#160;&#160;&#160;QObject *button=tabBar-&children().at(0);&#160;&#160;&#160;&#160;textEdit-&append(button-&metaObject()-&className());就会发现每个标签上的关闭按钮是CloseButton类,但是我发现qt里根本没有什么CloseButton类,后来我发现它是自定义的,继承自QAbstractButton类例如:创建一个tabBar,然后addTab一次,然后用以下代码tabBar-&setTabsClosable(true);textEdit.append(QString::number(tabBar-&children().count()));你就会发现此时,tabBar一共有三个子控件其中一个是标签上的CloseButton,另外两个是ToolButton,就是使得标签左右移动的那两个按钮根本没有发现有关单个标签的信息,就更别说获得单个标签的指针了我现在连单个标签是什么类都不知道,继承自什么类也不知道
再例如:刚才不是说了每个标签上的关闭按钮是CloseButton吗,然后我希望用查找每个标签上的CloaeButton按钮的Parent信息来找有关标签的信息但是却发现CloseButton的parent是QTabBar,而不是单个标签我原来的构想是:closeButton的parent是标签,标签的parent是标签栏但偏偏closeButton的parent就是标签栏,中间根本没有什么有关标签的东西
其实要获得QTabWidget里的QTabBar指针,不用继承那么麻烦只要QTabBar *tabBar=tabWidget-&findChildren&QTabBar*&().at(0);就可以了
好像是没有这个标签部件,直接在一个区域内画图实际上的tab也只是QTabBar私有数据中的一个结构体
也就是说基本上是不可能对QTabBar的tab单独设置样式了?
不知楼主这个问题有没有解决啊,求赐教!!
查看完整版本: [--
Powered by
Gzip disabled博客访问: 5113
博文数量: 4
博客积分: 139
博客等级: 入伍新兵
技术积分: 50
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
在开发Thinvd视频转换软件时,调用的QTabWidget作为effect界面的布局类。QTabWidget上可设置多个Tabbar, 当我选择了其中一个Tabbar,然后关闭窗口,希望通过setCurrentIndex(或setCurrentWidget)设置能再现关闭前的状态。结果只更改了Tabbar的状态,再没有更新里面的stackedWidget, 也就是说它的tabbar与stackedWidget没有保持一致。个人在做这个之前反复查阅了QTabWidget的文档,能设置它当前界面的也就是setCurrentIndex,setCurrentWidget,如果是点击Tabbar是没有问题的。
看了一下QTabWidget::currentChanged ( int index ) 的来源,相关跟踪:
1. connect(d->tabs, SIGNAL(currentChanged(int)),&&&&&&&&& this, SLOT(_q_showTab(int)));
2. void QTabWidgetPrivate::_q_showTab(int index){& Q_Q(ImTabWidget);& if (index count() && index >= 0)&&&&& stack->setCurrentIndex(index);& emit q->currentChanged(index);#ifdef QT3_SUPPORT& emit q->selected(q->tabText(index));& emit q->currentChanged(stack->widget(index));#endif}
3. 需要调用的setCurrentIndex:void QTabWidget::setCurrentIndex(int index){&&& Q_D(ImTabWidget);&&& d->tabs->setCurrentIndex(index);+&& if (index stack->count() && index >= 0)+&&&&&& d->stack->setCurrentIndex(index);}
把蓝色部分加到红色部分即可,这样tabbar与stackedWidget就可以保持一致了.
用图说明一下现象:如图中状态时关闭窗口,再次打开时,Tabbar中的Effect显示是对应,但StackWidget却显示成了Subtigle对应的stackWidget.
阅读(2094) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 苹果id验证失败怎么办 的文章

 

随机推荐