C++ QT学习记录 二、QT槽、信号机制

一、槽机制
槽函数的使用参考:槽函数
槽函数:(public/private/protected)slots 槽是普通的C++成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。
public slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。这对于组件编程非常有用,你可以创建彼此互不了解的对象,将它们的信号与槽进行连接以便信息能够正确的传递。
protected slots:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。这适用于那些槽,它们是类实现的一部分,但是其界面接口却面向外部。
private slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。这适用于联系非常紧密的类。
槽也能够声明为虚函数,这也是非常有用的。

遇到问题:点击按钮没反应,原因:应该先显示窗口,再显示按钮。

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    button = new QPushButton(tr("aaa"));
    button->setParent(this);
    button->setFixedSize(200, 100);
    button->setStyleSheet("QPushButton { background-color : white;"\
        "color : blue;"\
        "border-radius : 2px;"\
        "border : 2px solid green;"\
        "font : 15px;}");

    QWidget::connect(button,                 //信号发射者,为一个指针
        &QPushButton::clicked,        //发射的信号,形式为&加上作用域加上信号函数名
        this,               //信号的接收者,为一个指针
        &QtWidgetsApplication1::close_window);         //对应的槽函数,形式为&加上作用域加上槽函数名
 
    ui = new Ui::QtWidgetsApplication1Class;
    ui->setupUi(this);
    //设置窗口标题
    QTextCodec* codec = QTextCodec::codecForName("GBK");//修改这两行
    //setWindowTitle(tr("的现在地方"));
    setWindowTitle(codec->toUnicode("中文按钮"));
    //重设窗口大小
    resize(1080, 720);

}

改成下面代码就可以了

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    ui = new Ui::QtWidgetsApplication1Class;
    ui->setupUi(this);
    //设置窗口标题
    QTextCodec* codec = QTextCodec::codecForName("GBK");//修改这两行
    //setWindowTitle(tr("的现在地方"));
    setWindowTitle(codec->toUnicode("中文按钮"));
    //重设窗口大小
    resize(1080, 720);

    button = new QPushButton(tr("aaa"));
    button->setParent(this);
    button->setFixedSize(200, 100);
    button->setStyleSheet("QPushButton { background-color : white;"\
        "color : blue;"\
        "border-radius : 2px;"\
        "border : 2px solid green;"\
        "font : 15px;}");

    QWidget::connect(button,                 //信号发射者,为一个指针
        &QPushButton::clicked,        //发射的信号,形式为&加上作用域加上信号函数名
        this,               //信号的接收者,为一个指针
        &QtWidgetsApplication1::close_window);         //对应的槽函数,形式为&加上作用域加上槽函数名
}

二、信号与发射
信号函数 signals在定义时大多是只定义而不实现的。
发射信号 emit + 信号函数

三、连接
在Qt框架下,连接交互四要素的工具:connect函数
这里信号函数和槽函数种的参数只需要保留类型,不用具体写出参数名。
用法1:

connect(sender,                 //信号发射者,为一个指针
        &Filed::signal,        //发射的信号,形式为&加上作用域加上信号函数名
        reciver,               //信号的接收者,为一个指针
        &Filed::slot);         //对应的槽函数,形式为&加上作用域加上槽函数名

用法2:

connect(sender,                        //信号发射者,为一个指针
        SIGNAL(signal(arg type)),      //发射的信号,形式为SIGNAL括号内加上带参数的信号函数
        reciver,                       //信号的接收者,为一个指针
        SLOT(slot(arg type)));         //对应的槽函数,形式为SLOT括号内加上带参数的槽函数

SIGNAL()和SLOT()都是宏

四、消息框控件QMessageBox
用来实现提示消息框(有消息、疑问、警告、错误等预置形式)

五、按钮控件QPushButton

设置控件上的文本 setText(const Qstring &);
绑定窗口 setParent(QWidget* parent);
大小设置 setFixedSize(const QSzie &);resize(const QSzie &);
位置的设置 move(const QPoint &);
样式设置 setStyleSheet(const QString &styleSheet);

六、QRandomGenerator
QT框架下随机生成数字:

QRandomGenerator::global()->bounded(int highest);  //0~hightest之间
QRandomGenerator::global()->bounded(int lowest, int highest);  //lowest~hightest之间

七、int与QString相互转换
7.1int转QString:

QString x = QString::number(int y);

7.2QString转int:

QString x = QString::number(10);
int x_num = x.toInt();

QT数据类型参考:QT中的数据类型
QString、CString、std::string区别:
它们是字符串类型的不同变体。
std::string是ISO标准中的一种,在您希望可移植性的情况下可能首选。所有声称符合该标准的实现都需要提供它。
CString来自MFC,通常只能在该环境中使用。如果要专门针对Windows编程,则可以使用它。它可能具有std::string未提供的其他功能。
QString是Qt的变体,用于表示使用Qt的程序中的字符串。与CString一样,它与环境紧密相关,因此可以提供比std::string更高的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值