有谁知道如何能够为Qt应用程序的整个窗口设置背景颜色?
到目前为止,我正在使用样式表,但只能弄清楚如何为窗口小部件分配背景颜色,如QGroupBox或QPushButton.基本上,如果我想要黑色背景,如何在没有原始背景边框的情况下使其无缝化?
我的Window项目中有一个子类,在运行时,实例创建并完全在QML端显示.我知道我可以阻止窗口由不包括被最小化WindowMinimizeButtonHint的flags:,但我确实需要有最小化按钮存在并启用,但能够拦截的最小化按钮点击,取消实际的最小化,并做其他事(仅供参考我的客户要求这种非标准的窗口行为,而不是我.
到目前为止,我已经能够达到的唯一的事情是处理onWindowStateChanged:事件,检查windowState === Qt.WindowStateMinimized并呼吁show()从一个计时器(它调用的事件处理程序内直接什么都不做).这导致窗口向下移动到系统托盘,然后突然恢复正常.
有没有办法做到这一点,比如OnMinimized可以取消的事件?
编辑:根据Benjamin T的回答,我至少是OSX解决方案的一部分:
#import <AppKit/AppKit.h>
bool NativeFilter::nativeEventFilter(const QByteArray &eventType,
void *message, long *result)
{
if (eventType == "mac_generic_NSEvent") {
NSEvent *event = static_cast<NSEvent *>(message);
if ([event type] == NSKeyDown) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我能够拦截并取消所有NSKeyDown事件(同时留下其他事件,如鼠标点击等仍在工作).剩下的问题是我仍然不知道拦截一个最小化事件 - NSEvent.h似乎没有任何涵盖它的东西.也许我需要演绎不同类型的活动?
编辑2 - 工作解决方案:
我无法找到任何方法来截取最小化事件并取消它,所以我的解决方法是拦截窗口上的点击,确定点击是否超过最小化按钮(或关闭或缩放按钮)并取消如果是这样的事件(并向我的qml窗口发送通知,表示发生了点击).我还处理双击标题栏以缩放窗口,并使用Command-M键最小化窗口的情况.
第一步是实施一个QAbstractNativeEventFilter.在你的标题中:
#include <QAbstractNativeEventFilter>
class NativeFilter : public QAbstractNativeEventFilter {
public:
bool nativeEventFilter(const QByteArray &eventType, void …Run Code Online (Sandbox Code Playgroud) 我一直在研究两个类QOpenGLWindow和QOpenGLWidget。在 QOpenGLWindow 的文档中,它指出:“与 QOpenGLWidget 不同,QOpenGLWindow 不依赖于 widgets 模块,并提供更好的性能。” 在我当前的项目中,我制作了一个QMainWindow带有Dock 小部件QDockWidget的OpenGLWidget。
对于这个项目,我需要 GL 部分尽可能高效,所以我想知道是否值得尝试将其转换为QOpenGLWindow. 但是,我不知道性能差异是什么。如果它很小,那么我将保留当前的格式,如果差异很大,那么我将转换它。
有谁知道性能差异是什么?
我使用Qt Creator创建了一个小部件,它在主窗口内有两个子窗口,一些按钮可以加载,保存图像,设置笔宽和颜色以在窗口上绘画.但是,当我开始绘画时,它给我错误的说法
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
QPainter::drawPoints: Painter not active
Run Code Online (Sandbox Code Playgroud)
有谁知道我在做什么错,我检查了与此主题相关的线程但找不到合适的解决方案.我也是c ++的新手,所以请帮我找一个解决方案
这是我的代码
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtCore>
#include <QImage>
#include <QColor>
#include <QPoint>
#include <QtGui>
#include <QPainter>
#include <QMainWindow>
#include <QFileDialog>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
bool isModified() const { return modified; }
QColor penColor() …Run Code Online (Sandbox Code Playgroud)