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 开源版

ma​​inwindow.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

ma​​inwindow.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 - 仅在初始(第一个)窗口中工作的触摸屏事件的主要内容,如果未能解决你的问题,请参考以下文章

获取在 Qt5 中工作的 opencv_gpu 函数

窗口系统如何通知QApplication?

Ckeditor 不能在 laravel 5.5 的 vue js 中工作

创建在 IE 中工作的文件上传

在一个部门的所有项目中工作的员工

包含不在 Powershell 中工作的运算符