• 5481阅读
  • 3回复

[提问]为何我生成的按钮无法按动? [复制链接]

上一主题 下一主题
离线mach5
 

只看楼主 倒序阅读 楼主  发表于: 2011-04-16
本人初学者,请教一下高手:
我想在主窗口上生成一组按钮,代码如下:
//---------mainwindow.h:
class MainWindow : public QMainWindow {
......
private:
   ......
    QPushButton** MyBtn;
};
//---------mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    MyBtn = new QPushButton*[3];
    for(int i=0; i<3; i++)
    {
       MyBtn = new QPushButton(this);
       switch(i)
        {
            case 0: { MyBtn->setGeometry(32, 64, 32, 32); MyBtn->setText("str0"); break;}
            case 1: { MyBtn->setGeometry(72, 64, 32, 32); MyBtn->setText("str1"); break;}
            case 2: { MyBtn->setGeometry(112, 64, 32, 32);MyBtn->setText("str2");  break;}
    }
       MyBtn->show();
    }
    ui->setupUi(this);
}

编译后发现按钮可以显示,但是无法按动。

此外,如果把  MyBtn = new QPushButton(this); 改为MyBtn = new QPushButton; 则主窗口上没有按钮,另外会生成3个浮动窗口,每个窗口上有1个按钮,这些按钮都可以按动。

请教是怎么回事?谢谢~
离线roywillow

只看该作者 1楼 发表于: 2011-04-16
因为你在new的时候已经指定了parent,所以按钮会自动添加到父对象中,并且显示出来,所以show应该是用不到的
而如果你不指定,那么这些按钮会被默认为独立的窗口,show之后就会显示出来成窗口
另外你没connect,自然什么事都不会发生,不过应该还是会有按动效果的吧……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 2楼 发表于: 2011-04-16
看这个吧,我就不多解释了。你们犯了同一个错误:QMainWindow 用法不对

http://hi.baidu.com/cyclone/blog/item/d27c41349e32b75b251f14d4.html
离线roywillow

只看该作者 3楼 发表于: 2011-04-16
Ouch!
没注意到是QMainWindow……!
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个