界面设计
通过UI设计器来实现界面的搭建和一些基础的signal函数和solt函数
基类选择QDialog类, 关于qdialog和qmainwindow这两个基类的区别是什么?
以下是万能的chatgpt的回答
QDialog和QMainWindow都是Qt框架中的基础类,用于创建图形用户界面(GUI)应用程序。
QDialog类提供了一个模态对话框,通常用于显示一个对话框窗口,让用户输入一些信息或执行一些操作,然后返回结果。对话框是一个独立的窗口,通常只显示少量的信息或者功能。
而QMainWindow类提供了一个主窗口,通常包含多个子窗口,如工具栏、菜单栏、状态栏、中央工作区等,常用于实现复杂的应用程序界面。主窗口通常是非模态的,允许用户同时进行多个操作。
因此,两者最主要的区别在于其应用场景。如果只需要简单地显示一个对话框,那么QDialog是更好的选择;如果需要创建一个复杂的应用程序窗口,那么QMainWindow则更为适合。
总之, 对于我这个纯新手来说, 目前这两个没区别
可视化的界面设计, 如下图
都是通过拖曳控件(widget)来实现的, 需要注意的就是每个控件的名字要改一下, 因为等下的点击方式生成的槽函数的名字格式是
void on_<object_name>_<signal_name>(<signal parameter); // 如果默认名字_1, _2就比较难分辨
最后的效果是上图右方所示.
代码部分
最重要的signal函数和solt函数部分, 以下是我的个人作为新手的初步认知:
它们两个都是特殊的函数, 可以有参数且前者的参数的个数应该大于或者等于后者
它们之间的连接如果是自己写的话是这样的
QObject::connect(sender, SIGNAL(signal()), receiver, SOLT(SOLT()));
而QObject是所有类的基类, 所以可以省略
也就是
connect(sender, SIGNAL(signal()), receiver, SOLT(SOLT()));
一个信号函数可以连接多个槽函数, 一个槽函数也可以连接多个信号函数;
甚至可以一个信号函数连接另一个信号函数(这是书上看的, 目前没遇到)
另一种槽函数生成方法
通过右键控件, “转到槽”, 然后选择信号函数, 会自动在dialog.h头文件里面生成槽函数的定义
然后再dialog.cpp里面生成个架子等待填充内容
这里之所以信号函数里面带了一个bool类型的参数, 是因为生成信号函数时我选择了clicked(bool), 这样就会传来一个参数所以当前的checkBox有没有被选中
这里没有写connect是构造函数里有个setupUI里面有条语句
QMetaObject::connectSlotsByName(Dialog); // 遍历界面所有组件然后通过名字和信号关联
自定义信号和槽的连接
通过点击复选框来改变文本颜色
void Dialog::setTextFontColor() // bool checked还是不使用了, 因为无法判断是哪个颜色选项被选择了
{
// inline void QFont::setBold(bool enable)
// { setWeight(enable ? Bold : Normal); }
// 可以看到, 设置粗体就是根据bool值来的, 所以click带个bool比较好
QPalette plet = ui->txtEdit->palette();
// plet.setColor(QPalette::Text, Qt::green);
if (ui->rBtnBlack->isChecked()) {
plet.setColor(QPalette::Text, Qt::black);
} else if (ui->rBtnBlue->isChecked()) {
plet.setColor(QPalette::Text, Qt::blue);
} else if (ui->rBtnRed->isChecked()) {
plet.setColor(QPalette::Text, Qt::red);
} else {
plet.setColor(QPalette::Text, Qt::black);
}
ui->txtEdit->setPalette(plet);
}
https://doc.qt.io/qt-5/reference-overview.html
官方文档, 可以用来查各种api
最后ui指针是什么
ui指针可以控制界面上的所有小组件
它是从UI_Widget继承的一个类
dialog.h文件里的Ui::dialog和类dialog同名, 但是是不同的类,
总之ui指针可以访问可视化界面的所有组件.