Qt 5.5 - 仅在初始(第一个)窗口中工作的触摸屏事件
Posted
技术标签:
【中文标题】Qt 5.5 - 仅在初始(第一个)窗口中工作的触摸屏事件【英文标题】:Qt 5.5 - touchscreen-events only working in initial (first) window 【发布时间】:2015-09-17 07:24:09 【问题描述】:我已经设置了一个基本的 Qt-Widgets-Application(Qt 5.5 社区),其中包含一个简单的 QWidget“MainWindow”和一个附加的 QWidget“SettingsScreen”。
在“MainWindow”中,触摸屏事件(由操作系统处理)按预期工作,但在打开“SettingsScreen”后,所有触摸事件都在桌面上执行,直到我使用鼠标或键盘关闭“SettingsScreen”。
环境:
Ubuntu Studio 14.04.03 Qt 5.5 开源版mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <settingsscreen.h>
namespace Ui
class MainWindow;
class MainWindow : public QWidget
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_btnExit_clicked();
void on_btnSettings_clicked();
private:
Ui::MainWindow *ui;
SettingsScreen *wSettingsScreen;
;
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "settingsscreen.h"
#include "ui_settingsscreen.h"
MainWindow::MainWindow(QWidget *parent) : QWidget(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
MainWindow::~MainWindow()
delete ui;
void MainWindow::on_btnExit_clicked()
this->close();
void MainWindow::on_btnSettings_clicked()
wSettingsScreen = new SettingsScreen(parentWidget());
wSettingsScreen->show();
settingsscreen.h
#ifndef SETTINGSSCREEN_H
#define SETTINGSSCREEN_H
#include <QWidget>
namespace Ui
class SettingsScreen;
class SettingsScreen : public QWidget
Q_OBJECT
public:
explicit SettingsScreen(QWidget *parent = 0);
~SettingsScreen();
private slots:
void on_pushButton_clicked();
void on_btnBack_clicked();
private:
Ui::SettingsScreen *ui;
;
#endif // SETTINGSSCREEN_H
settingsscreen.cpp
#include "settingsscreen.h"
#include "ui_settingsscreen.h"
SettingsScreen::SettingsScreen(QWidget *parent) :
QWidget(parent),
ui(new Ui::SettingsScreen)
ui->setupUi(this);
SettingsScreen::~SettingsScreen()
delete ui;
void SettingsScreen::on_btnBack_clicked()
this->close();
我刚刚开始使用 Qt 进行开发,所以如果我遗漏了一些重要的东西,请原谅我 :)
任何帮助将不胜感激!
提前谢谢你!
【问题讨论】:
MainWindow 是从 QMainWindow 派生的,而 settingscreen 在派生自?如果您也可以共享标题,那就太好了。 作为第一个猜测:您可能需要连接信号/插槽 @Gombat MainWindow 和 SettingsScreen 来自 QWidget afaik。为了完整起见,我已将标题添加到原始问题中。 @BogdanWilli 如果使用鼠标单击按钮,这些功能可以正常工作,所以我假设连接正常(触摸在操作系统级别处理)或者是否有“触摸屏事件”的附加信号? 【参考方案1】:实际上,QMainwindow 或应用程序的任何基本 Widget 都能够正确地将未处理的触摸屏事件合成为鼠标事件。因此,每当您创建对话框/小部件时,请确保将 Mainwindow 设置为父窗口,并在子窗口小部件的构造函数中使用 setParent(parent)。即使我也面临这种问题,这对我有用。
【讨论】:
以上是关于Qt 5.5 - 仅在初始(第一个)窗口中工作的触摸屏事件的主要内容,如果未能解决你的问题,请参考以下文章