QT中新建的类继承QWidget和QMainWindow的不同之处
来源:互联网 发布:讲文明知礼仪的故事 编辑:程序博客网 时间:2024/06/06 02:49
最近在学习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);增加的
}
- QT中新建的类继承QWidget和QMainWindow的不同之处
- qt 中QDialog 和QMainWindow 和 Qwidget 的区别
- QMainWindow与QWidget和QDialog设置布局的不同之处
- QMainWindow与QWidget和QDialog设置布局的不同之处
- QT中QMainWindow、QWidget、QDialog的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- QT中QWidget、QDialog及QMainWindow的区别
- eclipse hadoop开发环境配置
- Codeforces Round #196 (Div. 2) A. Puzzles
- 【黑马程序员】java I/O流浅谈
- Codeforces Round #196 (Div. 2) B. Routine Problem
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)
- QT中新建的类继承QWidget和QMainWindow的不同之处
- 如何基于卫星地图制作矢量化电子地图
- hdu 4324
- 简单文件操作(Linux下C++实现) 打开,读取 写入 关闭
- 找回EC2的Key Pair文件
- Android SDK/Android.bat does not find SWT.jar file
- 05-session的增删改查
- STL函数对象:与函数指针的比较
- linux C++ socketpair进行父子进程间通信