• 6424阅读
  • 9回复

Qstack加入QDialog初始化出现重影(问题补充) [复制链接]

上一主题 下一主题
离线chester_lp
 

只看楼主 倒序阅读 楼主  发表于: 2009-09-17
                    
前面声明了:
          
                    model1= new QDialog(.........)
                   model2= new QDialog(..........)
                   model3 = new QDialog(..........)
                   .
                   .
                   .
                   .中间加入的list->insertItem(....)与之对应

                      stack ->addWidget(model1);
    stack ->addWidget(model2);
    stack ->addWidget(model3);
加入之后,构造此对象的时候。虽然显示了3个model对话框,但是显示第一个的时候,第二和第三的影子也印到
上面了。修改了显示顺序stack->setCurrentIndex,设置第一个显示,也没有用。
我看其他的例子是stack->addWidget(label),加label就没上述问题,可能是他们比较小吧。。。但是这里始终
不知道怎么解决。
谢谢高手帮助啊,小弟简直不行了。。

补充问题:
再次观察了下,重影就是stack初始化的时候,把3个对话框都重绘了一次。不知道什么方法可以让对话框只绘制第一个,而后面两个
不绘制。当点击list的时候再绘制。
[ 此帖被chester_lp在2009-09-17 11:00重新编辑 ]
离线chester_lp

只看该作者 1楼 发表于: 2009-09-17
顶上去
离线rqzrqh

只看该作者 2楼 发表于: 2009-09-18
倒着顺序插入就行了
离线shiroki

只看该作者 3楼 发表于: 2009-09-19
你贴个可以编译的例子
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线chester_lp

只看该作者 4楼 发表于: 2009-09-20
感谢版主哈。
我看到例子是linux 窗口程序设计的里面的,里面的顺序是一样的,但是它用stack->addWidget(label),而大家知道,label占用的文字空间很少,我发现dialog也应该能添,但是添加后。就连续生成3个了。。
离线chester_lp

只看该作者 5楼 发表于: 2009-09-20
2楼的同学。。。交换方式不可行。。
离线chester_lp

只看该作者 6楼 发表于: 2009-09-20
源代码如下:
StackDialog:: StackDialog (QWidget *parent, Qt::WFlags flags)  : QDialog(parent, flags)
{
    ui.setupUi(this);
    setWindowTitle(tr("xxxxxx"));
    stack = new QStackedWidget();
    list = new QListWidget(parent);
    tp1= new tp1(type1);//增加对话框1
    list->insertItem(0,tr("add type1"));
    stack ->addWidget(tp1);

    tp2= new tp2(type2); //增加对话框2
    list->insertItem(1,tr("add type2"));
    stack ->addWidget(tp2);

    tp3= new tp3(type3); //增加对话框3
    list->insertItem(2,tr("add type3"));
    stack ->addWidget(tp3);
    
    stack->setMinimumSize(QSize(522, 330));
    stack->setMaximumSize(QSize(800, 330));
    stack->setCurrentWidget(tp1);    
    QFont font("AR PL KaitiM GB",12);
    this->setFont(font);
    stack->repaint();
    
    QHBoxLayout *mainLayout = new QHBoxLayout(this);
    mainLayout->setMargin(10);
    mainLayout->setSpacing(6);
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack,0,Qt::AlignHCenter);
    mainLayout->setStretchFactor(list,1);
    mainLayout->setStretchFactor(stack,1);
                    
                      connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
                      //在ui设计的时候,设计了ok和cancel按钮    
           connect(ui.okButton,SIGNAL(clicked()),this,SLOT(add()));
    connect(ui.cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
}
离线rqzrqh

只看该作者 7楼 发表于: 2009-09-20
new 了之后就hide(),然后放入到stack里面试试
离线chester_lp

只看该作者 8楼 发表于: 2009-09-21
感谢楼上的提示,不过还是出现了重影问题。
问题我想了个办法,把tp1、tp2、tp3的继承方式改为Qwidget,再加入StackDialog 。
运行的话,好像就没重影了。。很纳闷。。
我重新写了样例,如下
离线chester_lp

只看该作者 9楼 发表于: 2009-09-21
dia1.cpp如下:
#include "dia1.h"

dia1::dia1(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    ui.setupUi(this);
}

dia1::~dia1()
{

}

contain.cpp如下:
#include "contain.h"
#include "dia1.h"
#include "dia2.h"
#include "dia3.h"
#include <QListWidget>
#include <QStackedWidget>
#include <QHBoxLayout>
#include <QLabel>
#include "QMessageBox"
#include "QTextCodec"
Contain::Contain(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    ui.setupUi(this);
    

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
setWindowTitle(tr("XXXX"));
    stack = new QStackedWidget();
    list = new QListWidget(parent);
    d1= new dia1();
    list->insertItem(0,tr("添加AAA"));
    stack ->addWidget(d1);

    d2= new dia2();
    list->insertItem(1,tr("添加BBB"));
    stack ->addWidget(d2);

    d3= new dia3();
    list->insertItem(2,tr("添加CCC"));
    stack ->addWidget(d3);

    stack->setMinimumSize(QSize(522, 330));
    stack->setMaximumSize(QSize(800, 330));
    //更改字体
    stack->setCurrentWidget(d1);    
    QFont font("AR PL KaitiM GB",12);
    this->setFont(font);
    stack->repaint();

    QHBoxLayout *mainLayout = new QHBoxLayout(this);
    mainLayout->setMargin(10);
    mainLayout->setSpacing(6);
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack,0,Qt::AlignHCenter);
    mainLayout->setStretchFactor(list,1);
    mainLayout->setStretchFactor(stack,1);



    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
    connect(ui.okButton,SIGNAL(clicked()),this,SLOT(add()));
    connect(ui.cancelButton,SIGNAL(clicked()),this,SLOT(reject()));

}

Contain::~Contain()
{

}
快速回复
限100 字节
 
上一个 下一个