小编Vio*_*ffe的帖子

如何获取VS包项目中的DTE对象实例?

如何在VS包项目中获取DTE实例?它在插件项目中是直接的,因为application它作为参数传递给onConnection方法,但不清楚如何将它放入包中。

c# visual-studio-addins visual-studio-2012 visual-studio-package

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

将QWidget渲染到QImage会丢失alpha通道

我有一个简单的Qt小部件.这是一个QLabel应用简单的CSS样式.风格的重要部分是圆形边框:

QString css("border-style: solid;"
       "border-width: 3px;"
       "border-radius: 7px;");
Run Code Online (Sandbox Code Playgroud)

它在屏幕上显示得很好.边框之外的标签角落充满透明色,因此在任何背景下看起来都很棒.以下是在另一个小部件(具有深灰色背景颜色)上显示时的外观:

在此输入图像描述

现在,当我像这样将它呈现给QImage时

QImage bitmap(label->size(), QImage::Format_ARGB32);
QPainter painter(&bitmap);
balloon->render(&painter);
bitmap.save("C:/1.png");
Run Code Online (Sandbox Code Playgroud)

我明白了(在图像编辑器中打开图像以清楚地显示问题):

在此输入图像描述

请注意角落周围的透明度是如何保留的.有什么问题?我该如何正确渲染?

PS我试过这个来测试QImage是否能够保存alpha通道,并且我的图像编辑器正确显示它:

bitmap.fill(QColor::fromRgba(qRgba(0, 0, 0, 0)));
bitmap.save("C:/1.png");
Run Code Online (Sandbox Code Playgroud)

它工作正常,我可以看到透明度为方格图案.

qt transparency rendering alpha-transparency qwidget

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

类型转换枚举为整数,反之亦然

我有一个枚举

enum MYENUM
{
  VAL_1 = 0,
  VAL_2,
  VAL_3
};
Run Code Online (Sandbox Code Playgroud)

和两个分别具有整数和枚举作为参数的函数

void MyIntegerFunction(int integerValue)
{
...
}

void MyEnumFUnction(MYENUM enumValue)
{
...
}
Run Code Online (Sandbox Code Playgroud)

我有两个变量

int intVar = 10;
MYENUM enumVar = VAL_2;
Run Code Online (Sandbox Code Playgroud)

下面两种情况中的哪一种在调用这些函数时进行类型转换是正确的,为什么?

Case#1. MyEnumFUnction(static_cast<MYENUM>(intVar));
Case#2. MyIntegerFunction(static_cast<int>(enumVar));
Run Code Online (Sandbox Code Playgroud)

PS:没有C++ 11

c++ enums casting

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

ListView:从ListViewItem获取实际的项目对象

我将自己的类的项目添加到ListView(列表视图已适当设置绑定):

_listView.Items.Add(new ProblemsListItem());
Run Code Online (Sandbox Code Playgroud)

我有一个MouseDoubleClick处理程序,它获取ListViewItem被单击的:

void onProblemDoubleClick(object sender, MouseButtonEventArgs e)
{
    ListViewItem item = FindVisualParent<ListViewItem, ListView>(e.OriginalSource as DependencyObject);
}

public static TParent FindVisualParent<TParent, TLimit>(DependencyObject obj) where TParent : DependencyObject
{
    while (obj != null && !(obj is TParent))
    {
        if (obj is TLimit)
            return null;
        obj = VisualTreeHelper.GetParent(obj);
    }
    return obj as TParent;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何将其转换ListViewItem为我的ProblemsListItem对象,或从项目中获取该对象?

我尝试过继承ProblemsListItemListViewItem. 当然,我可以在处理程序中转换itemProblemsListItem类型,但这完全破坏了 ListView:所有列都是空的,没有正确填充。

c# wpf listview

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

如何检测Android是否具有完整的USB支持?

我的应用程序用于UsbManager与USB摄像头通信.某些设备没有USB支持.这些返回null(UsbManager)context.getSystemService( Context.USB_SERVICE ),否则将抛出一个NoSuchMethodError枚举设备时例外.我可以检测到这两个并正确显示消息.不幸的是,一些没有检测到USB设备的机器人也没有引起这些问题.他们只返回一个空的USB设备列表.如何才能正确检测到该系统不支持USB OTG?

usb android usb-otg

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

从变量模板类中提取类型包,并声明相同类型包的参数

首先,对不清楚的问题标题表示抱歉,如果您想要一个更好的方式来表达它,请随时编辑.

我有一节课:

template <typename ...Arguments>
class CSignal
{
    template <typename ...ActualArguments>
    void invoke(ActualArguments&&... args) const {}
};
Run Code Online (Sandbox Code Playgroud)

还有一个,这就是我遇到的问题:

class SomeClass
{
    template<typename ...Arguments>
    void invokeQueued(CSignal<Arguments...>& signal, const Arguments&... args)
    {
        m_queue.emplace_back([=](){signal.invoke(args...);});
    }

    std::deque<std::function<void (void)>> m_queue;
};
Run Code Online (Sandbox Code Playgroud)

问题:

CSignal<float> signal;
int i = 0;
SomeClass().invokeQueued(signal, i);
Run Code Online (Sandbox Code Playgroud)

错误:

template parameter 'Arguments' is ambiguous
could be 'float'
or       'int'
Run Code Online (Sandbox Code Playgroud)

可能天真的解决方案

template<typename ...FormalArguments, typename ...ActualArguments>
void invokeQueued(CSignal<FormalArguments...>& signal, const ActualArguments&... args)
{
    m_queue.emplace_back([=](){signal.invoke(args...);});
}
Run Code Online (Sandbox Code Playgroud)

是不是在这种特殊情况下可以接受的,因为我需要通过值(它们复制到拉姆达)捕捉到的参数,并将其从转换ActualArgumentsFormalArguments 一定的时候会出现invokeQueued被调用,而不是当拉姆达被调用. …

c++ variadic-templates c++11

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

c ++ rvalue引用转发性能

我正在做一些实验,试图了解转发是如何工作的,并且我遇到了我不理解的情况.

当我用clang 3.8 -O3编译时

class Foo {
  Foo(const std::string& s) : str(s) {}
  std::string str;
};
Run Code Online (Sandbox Code Playgroud)

class Foo {
  Foo(std::string&& s) : str(std::forward<std::string&>(s)) {}
  std::string str;
};
Run Code Online (Sandbox Code Playgroud)

Foo foo("this is a test")在第一种情况下构造Foo 几乎快2倍.

为什么?

c++ c++11

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

如何删除移动赋值运算符并保​​持与std容器的兼容性?

我有一个简单的RAII包装器来管理某个资源.这是界面:

struct ResourceWrapper
{
    explicit ResourceWrapper(RESOURCE resource);
    ResourceWrapper(const ResourceWrapper& other);
    ResourceWrapper& operator=(const ResourceWrapper& other);
    ~ResourceWrapper();

    ResourceWrapper(ResourceWrapper&& other) = delete;
    ResourceWrapper& operator=(ResourceWrapper&& other) = delete;
};
Run Code Online (Sandbox Code Playgroud)

这里的问题是,std一旦我明确删除了移动赋值运算符,我就不能再将这个类与容器和算法一起使用了.显然我确实需要删除或正确实现它,因为我刚刚学到了很多困难.

另一种方法是通过常规赋值运算符实现移动赋值,但我不确定如何正确执行.我想我需要类似的东西std::remove_reference?我想知道它是否会删除太多的引用,并产生不必要的临时对象.

c++ move-semantics c++11 move-assignment-operator

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

AlertDialog.Builder具有自定义视图:如何初始化视图?

我正在AlertDialog编辑一个列表项目.我可以通过我的编辑器布局Builder.setView,我可以从正面按钮回调中获得结果,但我没有看到初始化视图的方法.E. g.有一个EditText应该显示的特定字符串,等等.它可行吗?

我意识到我可以继承子类Dialog,但似乎我需要更多的实用程序代码来实现相同的结果.似乎不太干净.

android android-alertdialog

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

在Android 3中使用NumberPicker

我正在尝试使用Android 3.1中的NumberPicker小部件.我认为它现在是标准小部件,是公共API的一部分,而不再是内部小部件.但是,它不起作用.我可以在其中看到带有"0"的textEdit,但是没有按钮,我无法滚动它,也无法用键盘输入新的数字.

更新:

这是我用于测试的xml:

    <NumberPicker
        android:id="@+id/numberPicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

通过说不起作用我的意思是:它没有显示箭头(见截图),并且在模拟器上键盘没有显示.它在一个真实的设备上,但我不能输入文本,我只能删除它.

有什么建议?当有标准的小部件时,我真的很想写自己的小部件.

user-interface android android-widget

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