QT学习第一天

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++中静态成员函数不是只能访问静态成员变量,只是不能直接访问非静态成员变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值