一、槽机制
槽函数的使用参考:槽函数
槽函数:(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更高的效率。