使用vs2022学习开发Qt6时,在vs中打开Designer程序右键无法对CheakBox类使用“转到槽”的命令。查看了其他博主的博客,找到一个比较方便的技巧实现自动转到自定义槽。
首先明确一点,自动自定义槽的命名方式为"on_Qt对象名称_信号名"
我创建的是QtMainWindow类,首先展示一下示例项目,主要使用了3个QCheckBox和1个QPlanTextEdit对象
然后在其中自定义三个符合命名方式的槽函数,例如第一个QCheckBox名字是chkBoxBold,要连接clicked(bool)信号,按照自动命名规则:on_chkBoxBold_clicked,同理命名其他槽函数,QtMainWindow.h的声明应该如下
QtMainWindow.h
public slots:
void on_chkBoxBold_clicked(bool checked);
void on_chkBoxItalic_clicked(bool checked);
void on_chkBoxUnder_clicked(bool checked);
在QtMainWindow.cpp中实现这三个函数
QtMainWindow.cpp
void QtMainWindow::on_chkBoxBold_clicked(bool checked) {
QFont font = ui.plainTextEdit->font();
font.setBold(checked);
ui.plainTextEdit->setFont(font);
}
void QtMainWindow::on_chkBoxItalic_clicked(bool checked) {
QFont font = ui.plainTextEdit->font();
font.setItalic(checked);
ui.plainTextEdit->setFont(font);
}
void QtMainWindow::on_chkBoxUnder_clicked(bool checked) {
QFont font = ui.plainTextEdit->font();
font.setUnderline(checked);
ui.plainTextEdit->setFont(font);
}
需要注意,在vs中创建项目可能是用ui.操作对象而不是ui->操作的,这是创建的时候决定的
在QT Designer中不需要使用编辑信号和槽工具手动连接,否则该信号会执行两次:自动连接一次,手动编辑信号和槽两次
保存文件,然后可以查看效果,点击已经生效
实现猜测:QT 6 C++开发指南中介绍了ui文件中,编译生成的ui_QTMainWindows.h文件中有这样一个函数QMetaObject::connectSlotsByName(QtMainWindowClass),他在setupUi方法中被定义, 能够实现自动关联
技巧到此结束,上面的按钮没有实现互斥有一定缺陷,请读者注意