在qt的ui界面设置一个按键button,当按键点击一次时,可以发出和键盘按下某个键时相同的信号,并且该信号可以传递给visualboyadvance模拟器以此来控制模拟器游戏的运行,通过在qt设置按键来代替实际的键盘
操作环境:Ubuntu16.04
软件版本:qt5.5.1 visualboyadvance-m-2.1.1
按钮组包括的按钮有:
Push Button: 按钮
Tool Button: 工具按钮
Radio Button: 单选按钮
Check Box: 复选框
Command Link Button: 命令链接按钮
Dialog Button Box: 对话框按钮盒
下面以QPushButton举例介绍一下按钮的用法。
#include<PushButton>
//主要代码 后续 会将源码上传的 目前还在整理
setMinimumSize(200,120);
setMaximumSize(200,120);
QPushButton *quit = new QPushButton("Quit",this);
quit->setGeometry(62,40,75,30);
quit->setFont(QFont("Times",18,QFont::Bold));
connect(quit,SIGNAL(clicked()),this,SLOT(close()));
如图
点击按钮会关闭此窗口
根据问题内容,可以分为两个部分来解决这个问题: 1. 在Qt的UI界面中设置一个按键button来发出和键盘按下某个键时相同的信号。 2. 将该信号传递给visualboyadvance模拟器,以控制模拟器游戏的运行。
以下是具体的解决方案:
// 创建一个按键button
QPushButton *button = new QPushButton("Press Me", this);
// 连接button的clicked信号和自定义槽函数
connect(button, &QPushButton::clicked, this, &MainWindow::handleButton);
上述代码中,button
是一个指向QPushButton的指针,"Press Me"
是按键上显示的文本。handleButton
是自定义的槽函数,用于处理当按键被点击时的操作。
首先,安装xdotool
工具,用于模拟键盘按键事件。
sudo apt-get install xdotool
然后,在自定义的槽函数handleButton
中使用xdotool
来模拟键盘按键事件,发送指定的按键到visualboyadvance模拟器窗口。
void MainWindow::handleButton()
{
// 使用xdotool发送键盘按键事件
QProcess::execute("xdotool", {"search", "--onlyvisible", "--class", "VisualBoyAdvance-M", "key", "space"});
}
上述代码中,"VisualBoyAdvance-M"
是visualboyadvance模拟器窗口的类名。"space"
是要模拟的键盘按键,这里以空格键为例。你可以根据需要修改这些参数。
通过以上的解决方案,你可以在Qt中设置一个按键button来控制模拟器游戏的运行。当你点击该按键时,会模拟键盘按下相应的键,并将该事件发送给visualboyadvance模拟器窗口,从而实现对模拟器游戏的控制。
我只知道windows 上的 有个 API 叫 keybd_event , 你去查一下 linux 的对应 api 吧,这个我也不清楚
void MyWidget::handleButtonClick() {
// 模拟按下键盘按键
keybd_event(VK_KEY, 0, 0, 0); // VK_KEY是键盘按键的虚拟键码
// 模拟释放键盘按键
keybd_event(VK_KEY, 0, KEYEVENTF_KEYUP, 0);
}
要么点击按钮发送键盘点击事件,要么点击按键调用按钮触发的槽函数