c++ - Qt 5.5 - 触摸屏事件仅在初始(第一个)窗口中工作

标签 c++ linux qt

我已经设置了一个基本的 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 进行开发,所以如果我遗漏了一些重要的东西,请原谅我:)

任何帮助都将受到高度赞赏!!

提前谢谢您!

最佳答案

实际上,QMainwindow 或应用程序的任何基本小部件都能够正确地将未处理的触摸屏事件合成为鼠标事件。因此,每当您创建对话框/小部件时,请确保将 Mainwindow 设置为父窗口,并在子小部件的构造函数中使用 setParent(parent)。即使我也面临着这种问题,这对我很有用。

关于c++ - Qt 5.5 - 触摸屏事件仅在初始(第一个)窗口中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32624666/

相关文章:

c++ - QTcpServer 在不同的线程中接收和发送

c++ - 我们可以用 SFML/C++ 制作 Sprite 数组吗?

linux - Kettle - 以逗号作为小数点读取 CSV

linux - 在运行时 Ubuntu 加载共享库的错误 soname

linux - sudo: effective uid is not 0, sudo 是否安装了setuid root? (在 mac 操作系统 x 10.12 上)

c++ - Qt QLabel setPixmap 不需要的填充

c++ - 使用嵌套类函数时非静态数据成员的使用无效,但是当函数未嵌套时可以吗?

c++ - 链接到 Boost 正则表达式库时程序启动期间崩溃

C++ 精确复制文件内容

c++ - 在屏幕右侧显示主窗口(Qt 5.1.0)