QT中新建的类继承QWidget和QMainWindow的不同之处

本文探讨了在使用QT进行界面设计时,QWidget与QMainWindow的区别及其对窗口布局的影响。通过具体实例对比了两种基类的选择如何改变窗口组件的组织方式。

最近在学习QT,在做界面的时候发现,新建一个类时,本以为QMainWindow是QWidget的派生类,直接继承QMainWindow就好了,但是发现 继承QWidget和继承QMainWindow会对后面的窗口布局和显示有一定的影响。自己总结下。

例:(1)在calc.h中这样声明类Calc,使其继承QWidget
class Calc: public QWidget//注意这里是继承QWidget,not QMainWindow
{
 Q_OBJECT  //宏,使用signal和slot要先这样

private:
 //QWidget *mainWidget;
 QLineEdit *lineEdit;
 QPushButton *oneButton;
 QPushButton *twoButton;
 QPushButton *threeButton;
 QPushButton *fourButton; Calc();

private slots:
 //slots of button
 void on_oneButton();
 void on_twoButton();
 void on_threeButton();
 void on_fourButton();

}

则在calc.cpp中的实现是这样的:

Calc::Calc()
{
 setWindowTitle("Simple Caculator");//相当于“this->setWindowTitle("Simple Caculator");”,this指的是当前new的对象
 setWindowIcon(QIcon(":/Resources/icon.jpg"));

 lineEdit = new QLineEdit("0.");

QHBoxLayout *lineLayout = new QHBoxLayout;
 lineLayout->addWidget(lineEdit);

QHBoxLayout *firstLayout = new QHBoxLayout;
 firstLayout->addWidget(threeButton);
 firstLayout->addWidget(fourButton);

QHBoxLayout *secondLayout = new QHBoxLayout;
 secondLayout->addWidget(oneButton);
 secondLayout->addWidget(twoButton);

QVBoxLayout *mainLayout = new QVBoxLayout;
 mainLayout->addLayout(lineLayout);
 mainLayout->addLayout(firstLayout);
 mainLayout->addLayout(secondLayout);

setLayout(mainLayout);

}

(2)而如果在calc.h中使类Calc继承QMainWindow

class Calc: public QMainWindow//注意这里是继承QMainWindow ,not  QWidget
{
 Q_OBJECT  //宏,使用signal和slot要先这样

private:
 QWidget *mainWidget;//增加的
 QLineEdit *lineEdit;
 QPushButton *oneButton;
 QPushButton *twoButton;
 QPushButton *threeButton;
 QPushButton *fourButton; Calc();
private slots:
 //slots of button
 void on_oneButton();
 void on_twoButton();
 void on_threeButton();
 void on_fourButton();

}

则在calc.cpp中的实现是与上面的不同的:

Calc::Calc()
{

mainWidget = new QWidget;//增加的
 setWindowTitle("Simple Caculator");//相当于“this->setWindowTitle("Simple Caculator");”,this指的是当前new的对象
 setWindowIcon(QIcon(":/Resources/icon.jpg"));

 lineEdit = new QLineEdit("0.");

QHBoxLayout *lineLayout = new QHBoxLayout;
 lineLayout->addWidget(lineEdit);

QHBoxLayout *firstLayout = new QHBoxLayout;
 firstLayout->addWidget(threeButton);
 firstLayout->addWidget(fourButton);

QHBoxLayout *secondLayout = new QHBoxLayout;
 secondLayout->addWidget(oneButton);
 secondLayout->addWidget(twoButton);

QVBoxLayout *mainLayout = new QVBoxLayout;
 mainLayout->addLayout(lineLayout);
 mainLayout->addLayout(firstLayout);
 mainLayout->addLayout(secondLayout);

mainWidget->setLayout(mainLayout); //增加的
 //setLayout(mainLayout); //去掉
 setCentralWidget(mainWidget);增加的

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值