小编gsi*_*011的帖子

使用QGraphicsView时窗口小部件背景不透明但使用QGridLayout时透明

当我使用QGridLayout显示我的小部件时,只显示了小部件,并且未显示透明的图像部分.现在我切换到使用QGraphicsScene和QGraphicsView,现在我的图像在任何地方都是透明的灰色背景.

void Piece::paintEvent(QPaintEvent *)
{
    string image = ":/images/" + color + piece + ".png";
    pixmap.load(image.c_str());
    //pixmap.setMask(pixmap.createMaskFromColor(QColor(240, 240, 240)));

    QPainter paint(this);
    paint.drawPixmap(0, 0, pixmap);
} 
Run Code Online (Sandbox Code Playgroud)

这就是图像在我的小部件上的显示方式.当我使用代码时,

layout->addWidget(0,0,1,1);
Run Code Online (Sandbox Code Playgroud)

背景是透明的.但是当我使用时,

scene->addWidget(piece);
Run Code Online (Sandbox Code Playgroud)

小部件具有灰色背景.我怎样才能让它透明?如有必要,可以在这里找到完整的代码(可能没有必要):https://github.com/gsingh93/Chess

编辑:我根本无法解决这个问题...我尝试使用setAutoFillBackground(false); 但那没用.所以我最后的希望是将我的全班从QWidget转换为QGrahhicsItem.这不起作用,图像的背景仍然是灰色而不是透明.如果您无法弄清楚此代码有什么问题,有人可以发布或链接我的示例如何使用QGraphicsScene显示具有透明背景的图像?这是原始代码,后跟QGraphicsItem代码,后跟我的main函数.

#include "headers/piece.h"
#include <QPainter>
#include <QMouseEvent>
#include <QBitmap>
#include <QCursor>
using namespace std;

Piece::Piece(string color, string piece, QWidget *parent) :
    QWidget(parent)
{
    this->piece = piece;
    this->color = color;
    this->setMaximumHeight(36);
    this->setMaximumWidth(36);
    x = 0;
    y = 0;
    setMouseTracking(false);
}

void Piece::paintEvent(QPaintEvent *)
{
    string image = …
Run Code Online (Sandbox Code Playgroud)

c++ qt qt4 qgraphicsview qt4.7

3
推荐指数
1
解决办法
4142
查看次数

Java String.matches()中的正则表达式选项

我想在我的正则表达式后面添加选项'x',以便在java中使用String.matches()时忽略空格.但是,我在http://www.regular-expressions.info/java.html上看到了这一点:

Java String类有几种方法,允许您使用最少量代码在该字符串上使用正则表达式执行操作.缺点是你不能指定诸如"不区分大小写"或"点匹配换行符"之类的选项.

有没有人有一个简单的方法使用java,所以我不必更改我的正则表达式允许零或更多的空白在每个点可能有空格?

java regex whitespace

3
推荐指数
1
解决办法
6515
查看次数

Eclipse CDT控制台输出未显示在带路径的调试中,并且没有显示在没有路径的运行中

我正在尝试使用GCC在Windows 7上运行Eclipse CDT(64位eclipse).当我第一次使用GDB时(这本身就是一个挑战),在调试模式下运行程序是我获得输出的唯一方法.正常运行它没有给出任何控制台输出.经过几个小时的谷歌搜索,我发现如果我在eclipse中添加了C:/ cygwin/bin到我的环境路径,我可以在正常运行程序时得到输出.然后我在调试模式下运行它,没有输出.我测试了几次,以确保添加导致问题的路径.这是我运行的程序,

#include <iostream>

using namespace std;

int main() {
    cout << "Hello World!" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

那么我如何才能使普通模式和调试模式都工作,为什么我必须首先包含该路径(它已经在我的cygwin路径中,为什么CDT需要它?)?另外,为什么如果我添加一个路径到我的运行配置,它也会被添加到我的调试配置?

c++ eclipse console gcc eclipse-cdt

3
推荐指数
2
解决办法
1万
查看次数

将子类对象存储为超类并稍后检索子类

假设我有扩展SuperClass的类SubClass1和SubClass2.我需要将所有扩展SuperClass的对象存储在列表中(列表列表).现在我将列表传递给一个函数,该函数可以确定SuperClass之前的SubClass.然后,此函数应将SuperClass重新转换回其各自的子类.例如,

for (SuperClass superClass : list) {
    if (superClass.getType().equals("SubClass1")
        SubClass1 subClass = (SubClass1) superClass;
    else if (superClass.getType().equals("SubClass2")
        SubClass2 subClass = (SubClass2) superClass;
}
Run Code Online (Sandbox Code Playgroud)

此示例将导致类强制转换异常.是否有任何简单的解决方案来获得此功能?

编辑:正如其中一个答案所述,此代码应该导致异常.在此示例中,getType()方法必定存在问题.但是,使用instanceof关键字的解决方案通过消除对getType()方法的需要来解决问题.

java subclass type-conversion classcastexception superclass

2
推荐指数
1
解决办法
2811
查看次数

Pattern.COMMENTS总是导致Matcher.find失败

以下代码匹配两个表达式并打印成功.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    public static void main(String[] args) {

        String regex = "\\{user_id : [0-9]+\\}";
        String string = "{user_id : 0}";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(string);

        if (matcher.find())
            System.out.println("Success.");
        else
            System.out.println("Failure.");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想要空白无关紧要,所以下面也应该打印成功.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    public static void main(String[] args) {

        String regex = "\\{user_id:[0-9]+\\}";
        String string = "{user_id : 0}";

        Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
        Matcher matcher = pattern.matcher(string);

        if (matcher.find())
            System.out.println("Success.");
        else …
Run Code Online (Sandbox Code Playgroud)

java regex whitespace string-matching

2
推荐指数
1
解决办法
1339
查看次数

wscript.sleep在错误的时间发生

我不知道VBScript,但最近我需要编写一个具有SendKeys功能的脚本,而我无法在批处理文件中执行此操作.当我使用该命令在Windows 7机器中从命令提示符运行以下代码时cscript test.vbs,睡眠发生在telnet启动之前.问题可能是命令已执行但结果输出直到睡眠完成后才会显示.我该如何解决这个问题?

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "telnet localhost 25" & vbCr
wscript.sleep 5000
Run Code Online (Sandbox Code Playgroud)

编辑:如果我在启动之前放入一个sleep命令然后单击它必须键入的命令提示符窗口,我可以让我的脚本工作.这样,当脚本暂停时,它会暂停执行,但不会暂停显示命令提示符中的输出.我仍然需要一个命令行解决方案.

vbscript wmi sleep wsh sendkeys

2
推荐指数
1
解决办法
4098
查看次数

如果命令在变量中,则在子shell中执行管道命令不起作用

以下代码工作正常

#!/bin/bash

while true; do
     echo $(pwd | awk '{print "dir: "$1}')
     sleep 1
done
Run Code Online (Sandbox Code Playgroud)

但我需要命令在变量中,就像这样.

#!/bin/bash                                                                     

COMMAND=pwd | awk '{print "dir: "$1}'
while true; do
     echo $($COMMAND)
     sleep 1
done
Run Code Online (Sandbox Code Playgroud)

第一个片段执行正常,并打印出类似的东西dir: /present/directory.第二个片段只打印空白行.为什么这样,我该如何解决?

我使用的命令没有意义.我只需要使用管道并选择这些命令来演示它.

bash pipe

2
推荐指数
1
解决办法
2094
查看次数

切换到动态壁纸中的设置活动时出现IllegalArgumentException

我有一个运行正常的动态壁纸.我想为它添加一个设置活动,所以当我去动态壁纸选择器时,我完成了所有必需的步骤和设置按钮.但是,当我单击设置按钮时,我得到以下异常.

11-23 16:12:53.158: E/AndroidRuntime(5141): FATAL EXCEPTION: main
11-23 16:12:53.158: E/AndroidRuntime(5141): java.lang.IllegalArgumentException
11-23 16:12:53.158: E/AndroidRuntime(5141):     at android.view.Surface.nativeUnlockCanvasAndPost(Native Method)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at android.view.Surface.unlockCanvasAndPost(Surface.java:457)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at com.android.internal.view.BaseSurfaceHolder.unlockCanvasAndPost(BaseSurfaceHolder.java:215)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at com.gulshansingh.hackerlivewallpaper.HackerWallpaperService$HackerWallpaperEngine.draw(HackerWallpaperService.java:48)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at com.gulshansingh.hackerlivewallpaper.HackerWallpaperService$HackerWallpaperEngine.access$0(HackerWallpaperService.java:36)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at com.gulshansingh.hackerlivewallpaper.HackerWallpaperService$HackerWallpaperEngine$1.run(HackerWallpaperService.java:31)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at android.os.Handler.handleCallback(Handler.java:725)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at android.os.Looper.loop(Looper.java:137)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at android.app.ActivityThread.main(ActivityThread.java:5039)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at java.lang.reflect.Method.invokeNative(Native Method)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at java.lang.reflect.Method.invoke(Method.java:511)
11-23 16:12:53.158: E/AndroidRuntime(5141):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-23 16:12:53.158: …
Run Code Online (Sandbox Code Playgroud)

android surfaceview illegalargumentexception live-wallpaper

2
推荐指数
1
解决办法
1612
查看次数

NASM为dd生成的汇编说明

我一直在尝试使用NASM在Linux中进行汇编,这样我就能理解OSDev上loader.s脚本.

我发现有趣的一件事是用dd声明变量时生成的程序集.我运行了一些测试,我把输出放在下面.本质上,我只是分配不同的数字,并查看在目标文件(而不是可执行文件)中生成的程序集.

$ cat test1.s
global _start

section .text
    dd 0x0

_start:
    mov eax, 1
    mov ebx, 0
    int 80h

$ nasm -f elf test1.s ; objdump -d test1.o

test1.o:     file format elf32-i386


Disassembly of section .text:

00000000 <_start-0x4>:
   0:   00 00                   add    %al,(%eax)
    ...

00000004 <_start>:
   4:   b8 01 00 00 00          mov    $0x1,%eax
   9:   bb 00 00 00 00          mov    $0x0,%ebx
   e:   cd 80                   int    $0x80
Run Code Online (Sandbox Code Playgroud)

.

$ cat test2.s
global _start

section .text …
Run Code Online (Sandbox Code Playgroud)

assembly nasm cpu-registers

2
推荐指数
1
解决办法
746
查看次数

JSpinner在JOptionPane中占用整个宽度

我正在尝试将JSpinner放在JOptionPane中,如下所示,

        SpinnerModel saModel = new SpinnerNumberModel(11, 1, 36, 1);
        JSpinner saSpinner = new JSpinner(saModel);
        Dimension d = saSpinner.getSize();
        d.width = 20;
        saSpinner.setSize(d);

        Object[] message = { "Choose the key number for sa.", saSpinner };

        JOptionPane optionPane = new JOptionPane(message,
                JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
        JDialog dialog = optionPane.createDialog(frame, "Change Sa Key");
        dialog.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

这是有效的,但唯一的问题是,无论我设置的大小如何,JSpinner都会填充Dialog的宽度.我也尝试过使用setPreferredSize().我该如何解决?

java swing width joptionpane jspinner

1
推荐指数
1
解决办法
584
查看次数