• 23990阅读
  • 13回复

Qt如何动态添加控件 [复制链接]

上一主题 下一主题
离线花布鱼
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-15
练习写一个小程序
是按下主窗口的按钮后添加LCDNumber控件和Dial控件到窗口中
写了如下的代码 但是点击按钮之后没有反应 望高手赐教

  1.     connect( creatButton, SIGNAL(clicked()), this, SLOT(AddControls()));//在构造函数中说明信号和槽的关系 其中creatButton是窗口按钮
  2.     ......
  3. void TestDialog::AddControls()//添加控件
  4. {
  5.     //creat lcd control
  6.     lcd = new QLCDNumber(this);
  7.         lcd->setObjectName(QString::fromUtf8("lcd"));
  8.         lcd->setGeometry(QRect(50, 40, 221, 121));
  9.     
  10.     //creat dial control
  11.     dial = new QDial(this);
  12.         dial->setObjectName(QString::fromUtf8("dial"));
  13.         dial->setGeometry(QRect(50, 180, 221, 181));
  14.     dial->setRange(0, 100);
  15.         show();
  16.     timer->start(1000);
  17. }
离线花布鱼
只看该作者 1楼 发表于: 2009-10-15
。。。。。没有人知道吗。。。。。。
离线jorneyr

只看该作者 2楼 发表于: 2009-10-15
void TestDialog::AddControls()//添加控件
{
     hide(); // 加这一句试试. 其实你可以使用layout来布局, 在layout中加入也不错.

    //creat lcd control
    lcd = new QLCDNumber(this);
        lcd->setObjectName(QString::fromUtf8("lcd"));
        lcd->setGeometry(QRect(50, 40, 221, 121));
    
    //creat dial control
    dial = new QDial(this);
        dial->setObjectName(QString::fromUtf8("dial"));
        dial->setGeometry(QRect(50, 180, 221, 181));
    dial->setRange(0, 100);
        show();
    timer->start(1000);
}
离线花布鱼
只看该作者 3楼 发表于: 2009-10-15
将程序改成添加Layout中的方法后也不正确
代码如下:
  1. connect( creatButton, SIGNAL(clicked()), this, SLOT(AddControls()));//在构造函数中说明信号和槽的关系 其中creatButton是窗口按钮
  2.     ......
  3. void TestDialog::AddControls()//添加控件
  4. {
  5.     //creat lcd control
  6.     lcd = new QLCDNumber(this);
  7.         lcd->setObjectName(QString::fromUtf8("lcd"));
  8.         lcd->setGeometry(QRect(50, 40, 221, 121));
  9.     
  10.     //creat dial control
  11.     dial = new QDial(this);
  12.         dial->setObjectName(QString::fromUtf8("dial"));
  13.         dial->setGeometry(QRect(50, 180, 221, 181));
  14.     dial->setRange(0, 100);
  15.       QVBoxLayout  *layout = new QVBoxLayout;
  16.       layout->addWidget(lcd);
  17.       layout->addWidget(dial);
  18.       setLayout(layout);
  19.         show();
  20.     timer->start(1000);
  21. }
[ 此帖被花布鱼在2009-10-15 13:23重新编辑 ]
离线花布鱼
只看该作者 4楼 发表于: 2009-10-15
请问高手 此处添加 hide()是什么意思啊?
[ 此帖被花布鱼在2009-10-15 13:29重新编辑 ]
离线dbzhang800

只看该作者 5楼 发表于: 2009-10-15
你能给点其他信息么?
比如你做了什么努力,认真调试了没,你的程序中这个槽函数执行了没等等。。。

另外,建议看看 提问的智慧 这篇文章
离线aaaaa007

只看该作者 6楼 发表于: 2009-10-15
引用楼主花布鱼于2009-10-15 11:29发表的 Qt如何动态添加控件 :
练习写一个小程序
是按下主窗口的按钮后添加LCDNumber控件和Dial控件到窗口中
写了如下的代码 但是点击按钮之后没有反应 望高手赐教
[code]
.......


要把控件加入布局中
离线花布鱼
只看该作者 7楼 发表于: 2009-10-15
引用第2楼jorneyr于2009-10-15 12:13发表的  :
void TestDialog::AddControls()//添加控件
{
     hide(); // 加这一句试试. 其实你可以使用layout来布局, 在layout中加入也不错.
    //creat lcd control
.......



高手你好 我试过了 还是不行

layout的我也试过 都不行 不知道是不是我的代码不正确

我用添加layout的代码如下:

  1. QVBoxLayout *layout  = new QVBoxLayout;
  2. layout->addWidget(lcd);
  3. layout->addWidget(dial);
  4. setLayout(layout);
  5. show();
离线花布鱼
只看该作者 8楼 发表于: 2009-10-15
引用第5楼dbzhang800于2009-10-15 12:42发表的  :
你能给点其他信息么?
比如你做了什么努力,认真调试了没,你的程序中这个槽函数执行了没等等。。。
另外,建议看看 提问的智慧 这篇文章



谢谢^^
离线aaaaa007

只看该作者 9楼 发表于: 2009-10-15
把布局也写在槽AddControls()里边,先new,再addwidget()
离线花布鱼
只看该作者 10楼 发表于: 2009-10-15
引用第9楼aaaaa007于2009-10-15 13:14发表的  :
把布局也写在槽AddControls()里边,先new,再addwidget()



在AddControls()里边new了

更改成

QVBoxLayout *layout  = new QVBoxLayout;
layout->addWidget(lcd);
layout->addWidget(dial);
setLayout(layout);
show();

还是没有添加。高手,如果您要是有时间的话 帮我看看代码吧
我的全部代码在 http://www.qtcn.org/bbs/read.php?tid=22698

谢谢
离线花布鱼
只看该作者 11楼 发表于: 2009-10-15
嘿嘿 可以啦

是我自己犯了一个错误

创建了两个目录 修改的时候修改了A目录中的文件 运行的是B目录中的可执行文件

谢谢各位高手大大啦



最后的修改方法是将控件添加到Layout中 然后 setLayout(),show()就可以啦

QVBoxLayout *layout  = new QVBoxLayout;
layout->addWidget(lcd);
layout->addWidget(dial);
setLayout(layout);
show();
离线三少爷
只看该作者 12楼 发表于: 2012-05-08
啊,总算解决了我的问题,谢谢前面各位,非常感谢,非常感谢!!
离线xuweistudy
只看该作者 13楼 发表于: 2012-05-08
建议看书,<<Qt C++ for Gui>>
快速回复
限100 字节
 
上一个 下一个