QMainWindow、QDialog、QWidget三者区别
1.QMainWindow
- 用途:QMainWindow用于创建主窗口,通常作为应用程序的主界面。
- 特点:提供了菜单栏(QMenuBar)、工具栏(QToolBar)、状态栏(QStatusBar)和中心部件(QWidget)等标准布局。
2.QWidget
- 用途:是所有用户界面对象的基类,用于创建自定义窗口或部件。
- 特点:轻量级,没有内置菜单栏、工具栏或状态栏,可以作为独立窗口或嵌入其他窗口中使用
3.QDialog
- 用途:用于创建对话框窗口,通常用于与用户进行短暂交互。
- 特点:默认是模态窗口(阻塞主窗口),但也可以设置为非模态。提供了标准按钮布局(如“确定”、“取消”等)。适合用于输入、配置或提示用户信息。
信号函数与槽函数
//dialog.cpp文件
#include "dialog.h"
#include <QGridLayout>
const static double PI=3.1415926;
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
lab1=new QLabel(this);
lab1->setText("请输入圆球半径:");
lEdit=new QLineEdit(this);
lab2=new QLabel(this);
pbt=new QPushButton(this);
pbt->setText("计算圆球体积:");
QGridLayout *gdly=new QGridLayout(this);
gdly->addWidget(lab1,0,0);
gdly->addWidget(lEdit,0,1);
gdly->addWidget(pbt,1,0);
gdly->addWidget(lab2,1,1);
connect(lEdit,SIGNAL(textChanged(QString)),this,SLOT(CalcBallVolume()));
}
Dialog::~Dialog() {}
void Dialog::CalcBallVolume(){
bool isLoop;
QString valueStr=lEdit->text();
QString tempStr;
int valueInt=valueStr.toInt(&isLoop);
double dVSum=4.0*PI*valueInt*valueInt*valueInt/3.0;
lab2->setText(tempStr.setNum(dVSum));
}
信号函数只需要声明,不需要定义实现,而槽函数需要定义实现。
槽函数可以使用public slots/protected slots/private slots修饰。signals和slots是QT开发当中在C++语言基础之上扩展的关键词,专门用于指明信号函数和槽函数。
connect()是一个静态函数。静态函数只能访问静态成员变量。那么为什么那个访问非静态成员变量lEdit呢?
//dialog.h文件
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
QLabel *lab1,*lab2;
QPushButton *pbt;
QLineEdit *lEdit;
private slots:
void CalcBallVolume();
};
#endif // DIALOG_H
原来虽然静态成员函数不能直接访问非静态成员变量,但可以通过传递对象的指针或引用作为参数来间接访问非静态函数变量。
#include<iostream>
#include<string>
using namespace std;
class Person{
public:
static void getInfo(Person &p){
cout<<p.age<<endl;
cout<<p.name<<endl;
}
private:
static int age;
string name="uzi";
};
int Person::age=22;
int main(){
Person A;
Person B;
A.getInfo(B);
}
C++中静态成员函数不是只能访问静态成员变量,只是不能直接访问非静态成员变量。

3万+

被折叠的 条评论
为什么被折叠?



