• 6181阅读
  • 12回复

QT CREATOR的切换功能的如何实现? [复制链接]

上一主题 下一主题
离线snowseya
 

只看楼主 正序阅读 楼主  发表于: 2011-11-01
在qt creator中,打开一个已经存在的项目,此时,在项目中会显示文件、源文件等,例如,头文件有a.h  b.h  c.h,源文件有d.h  e.h。当点击a.h在项目的右侧会显示出a.h的内容,假设我浏览a.h的内容到其中的某行XXXX,并且把光标也放到这一行。此时我再点击d.h,进行浏览,并且浏览到yyyy行,把光标也放到这一行;再浏览b.h,浏览至zzzz行,并且把光标也放在这一行。
此时我再点击a.h时,会显示我上次浏览的界面,并且光标在xxxx行,如果再点击d.h,会显示上次浏览d.h时的界面,光标在yyyy行。
问题:这个功能是如何实现的?即能够记住前次浏览的界面,并且还把浏览的位置等都记下来?是用堆栈做的吗?
离线jdwx

只看该作者 12楼 发表于: 2011-11-03
回 11楼(snowseya) 的帖子
界面可以任意嵌套没问题,只要控件没被delete,内容肯定还在,至于想要实现什么功能就看代码怎么写,设计界面的基本原理就是界面要尽可能的简单。建议看一看《Macosx人机界面指南》会有一定的帮助。
再说一句:你写了那么多的字费了不少时间,但是我看了10分钟也没逻辑过来是怎么回事。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线snowseya

只看该作者 11楼 发表于: 2011-11-03
谢谢。您讲的完全正确。有个新的问题。就是STACK中的某个页面里面,是否可以再放STACK?
即:点击item2后,右侧的文本框下方增加一个工具栏,上面有A、B两个BUTTON,在工具栏下面再增加一个STACK,里面包含两个界面:C、D。C、D里面分别包含文本框、QCOMBOX等。当点击A时,显示C,当点击B时,显示D。现在想实现这么一个功能:点击ITEM2,在右侧的文本框输入中华,点击B,下面显示界面D,在其内的文本框输入人民,QCOMBOX选择国家。此时再点击ITEM1,然后再点击ITEM2后,右侧的文本框以及界面D中的信息是否还显示?并且是否显示界面D?还是显示界面C?
离线jdwx

只看该作者 10楼 发表于: 2011-11-02
回 9楼(snowseya) 的帖子
就是这个
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线snowseya

只看该作者 9楼 发表于: 2011-11-02
晕了,预览
离线snowseya

只看该作者 8楼 发表于: 2011-11-02
谢谢。不会吧,直接打开UI文件就可以测试?
离线jdwx

只看该作者 7楼 发表于: 2011-11-02
回 6楼(snowseya) 的帖子
不会出现问题,文本还会存在,附件里有一个UI,用Designer打开预览就可以测试。
附件: untitled.rar (1 K) 下载次数:3
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线snowseya

只看该作者 6楼 发表于: 2011-11-02
不好意思,我只是从QT参考上拿的
比如:在firstpagewidget中有两个text,初始都为空,当这两个TEXT每个都输入了内容,当切换到secondPageWidget后,想再切回firstpagewidget,采用上述办法,两个TEXT又为空了。怎样才能使firstpagewidget切换回来后,两个TEXT还显示切换之前输入的内容呢?即保持切换前的状态?
离线jdwx

只看该作者 5楼 发表于: 2011-11-02
回 4楼(snowseya) 的帖子
“但一改变,对应的WIDGET会改到最初始的状态”???
那些代码只是new出控件,布局。没有看到和状态有关的代码.
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线snowseya

只看该作者 4楼 发表于: 2011-11-02
如果采用堆栈方式,没有找到HIDE的方法呀,不知怎样该把顶层的WIDGET隐藏起来,


    QWidget *firstPageWidget = new QWidget;
     QWidget *secondPageWidget = new QWidget;
     QWidget *thirdPageWidget = new QWidget;

     QStackedLayout *stackedLayout = new QStackedLayout;
     stackedLayout->addWidget(firstPageWidget);
     stackedLayout->addWidget(secondPageWidget);
     stackedLayout->addWidget(thirdPageWidget);

     QVBoxLayout *mainLayout = new QVBoxLayout;
     mainLayout->addLayout(stackedLayout);
     setLayout(mainLayout);

     QComboBox *pageComboBox = new QComboBox;
     pageComboBox->addItem(tr("Page 1"));
     pageComboBox->addItem(tr("Page 2"));
     pageComboBox->addItem(tr("Page 3"));
     connect(pageComboBox, SIGNAL(activated(int)),
             stackedLayout, SLOT(setCurrentIndex(int)));


QT的参考中给出的例子如上。但一改变,对应的WIDGET会改到最初始的状态,无法保存住相关的信息。请帮助再想想办法。查资料一直没有查到。
离线jdwx

只看该作者 3楼 发表于: 2011-11-01
回 2楼(snowseya) 的帖子
如果原来的界面只是hide,不是close,自然再show的时候文本还在。
要是close,就要把文本存起来,show的时候添上去。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线snowseya

只看该作者 2楼 发表于: 2011-11-01
先谢谢。但如何记住呢?如果使用这个函数,每次要把textcursor记下来,下次的时候取出来,再使用settextcursor。如果界面上再有其他的控件,如COMBOX等,或者在一个界面上有我个QTEXTEDIT,而且每个都存了不同的内容。比如,一个界面A上有2个qtextedit,第一个存的是“中华人民共和国”,第二个存的是“庆祝神八”。如果此时,我进入了另外的一个界面B,当我想返界面A时,qtextedit还能分别显示出“中华人民共和国”和“庆祝神八”吗?如果想实现这样一种功能,如何实现?
离线jdwx

只看该作者 1楼 发表于: 2011-11-01
回 楼主(snowseya) 的帖子
QTextCursor QTextEdit::textCursor () const
void QTextEdit::setTextCursor ( const QTextCursor & cursor )
和这两个函数有关系。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个