小编nev*_*ets的帖子

QTenu中QActions的QTooltip

我希望能够显示QMenu项目的工具提示QAction.我所取得的最好成绩就是将一个悬停的信号连接QAction到一个QTooltip节目:

connect(action, &QAction::hovered, [=]{
    QToolTip::showText(QCursor::pos(), text, this);
});
Run Code Online (Sandbox Code Playgroud)

问题是有时程序会将工具提示定位在菜单下方,特别是在更改菜单时.

有没有办法强制工具提示显示在顶部?

c++ qt tooltip qmenu qaction

10
推荐指数
2
解决办法
3501
查看次数

在Redis中存储ip范围

我有很多不同提供商的IP范围.例如

P1: 192.168.1.10 - 192.168.1.50, 192.168.2.16 - 192.168.2.49,
P2: 17.36.15.34 - 17.36.15.255,
P3: ...
Run Code Online (Sandbox Code Playgroud)

我将此IP转换为int32:

P1: 3232235786 - 3232235826, 3232236048 - 3232236081, etc
Run Code Online (Sandbox Code Playgroud)

我的任务:按用户IP地址查找提供商名称(例如192.168.2.20(3232236052))

在MySQL中它很简单:

select name from ip_ranges where l_ip <= user_ip and user_ip <= r_ip
Run Code Online (Sandbox Code Playgroud)

如何用Redis做同样的事情?

redis

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

通过双缓冲区减少闪烁:SetStyle与重写CreateParam

任何人都可以解释它们之间的区别和关系

SetStyle(ControlStyles.UserPaint |
         ControlStyles.AllPaintingInWmPaint |
         ControlStyles.DoubleBuffer, true)
Run Code Online (Sandbox Code Playgroud)

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
        return cp;
    }
}
Run Code Online (Sandbox Code Playgroud)

他们需要减少闪烁,但是何时以及如何正确使用它们?它们可以单独使用,还是必须成对使用,这是什么原因?

谢谢!

积分:

第一个代码片段是从MSDN页面引用的; 在如何修复用户控件中的闪烁中找到第二个代码片段,原始作者是@HansPassant.

c# flicker winforms

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

如何在C#中将SVG文件转换为EMF文件

将SVG转换为EMF绝对是可能的,例如本网站.我想知道是否有可能在C#中实现这种转换?


更新:

我尝试使用SVG.NET读取SVG文件并将其绘制到一个Graphics对象,然后尝试将其导出Image为.emf扩展名中的MetaFile(我按照此处的说明操作:GDI +/C#:如何将图像另存为EMF?).读取成功完成,图像输出为.emf.但是,当我在PowerPoint中打开.emf时,它无法取消分组,这表明该文件的绘图信息实际上没有正确转储.

更新2:

现在它确实导出了一个无组合的.emf,但是取消组合显示效果非常糟糕.我使用以下代码生成.emf:

private void OpenPictureButtonClick(object sender, EventArgs e)
{
    var openFileDialog = new OpenFileDialog();
    openFileDialog.ShowDialog();

    _svgDoc = SvgDocument.Open(openFileDialog.FileName);

    RenderSvg(_svgDoc);
}

private void SavePictureClick(object sender, EventArgs e)
{
    var saveFileDialog = new SaveFileDialog {Filter = "Enhanced Meta File | *.Emf"};
    saveFileDialog.ShowDialog();

    var path = saveFileDialog.FileName;
    var graphics = CreateGraphics();
    var img = new Metafile(path, graphics.GetHdc());
    var ig = Graphics.FromImage(img);

    _svgDoc.Draw(ig);

    ig.Dispose(); img.Dispose(); graphics.ReleaseHdc(); graphics.Dispose();
}

private void …
Run Code Online (Sandbox Code Playgroud)

.net c# svg .emf

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

计算交换次数,使用类似算法的冒泡排序来排序第一个k最小元素

给定一个数组a和整数k.有人使用以下算法来获得前k个最小元素:

cnt = 0
for i in [1, k]:
    for j in [i + 1, n]:
        if a[i] > a[j]:
            swap(a[i], a[j])
            cnt = cnt + 1
Run Code Online (Sandbox Code Playgroud)

问题是:如何计算cnt(当我们获得最终的k-排序数组时)的值,即交换数量,O(n log n)或更好?

或者简单地说:计算使用上述算法排序的第一个k最小数字所需的交换次数,小于O(n log n).

我正在考虑一个二叉搜索树,但我感到困惑(当增加i时,数组将如何变化?如何计算固定i的交换次数?...).

sorting algorithm data-structures

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

TextBox可以显示的最大字符数

刚才我看到了一个问题:StringBuilder不会在TextBox中显示(WinForms,C#).该帖子的作者无法在他的单行中显示他的内容,这是一个大约5万字符的字符串TextBox.

答案指出他应该改变MultiLine财产true.评论中给出了解释:

由于迭代次数为10000次,因此生成的字符串很大,并且不会显示在单行文本框中.

所以我很好奇单行文本框可以显示最大长度.

我浏览了SO并发现了这个问题:TextBox最大字符数量(它不是MaxLength),它清除了一些疑问,但并非全部.我还是想知道:

  1. 由于Text物业是String类型,为什么它不能,即使处理50K人物MultiLinefalse
  2. 多少个字符,TextBox可以容纳时MultiLinefalse?我们有办法获得这个号码吗?
  3. 为什么MultiLine财产影响这种能力?

对于问题2的第一部分,我做了以下事情来验证:

我怀疑这个长度与分配给Text属性的内存有关.我在网上做了一些研究,这篇MSDN文档给了我一些见解:

Windows NT 4.0,Windows 2000,Windows 2000 Professional,Windows 2000 Server,Windows 2000 Advanced Server,Windows XP Home Edition,Windows XP Professional x64 Edition,Windows Server 2003平台注意:如果MaxLength属性设置为0,则最大数量为用户可以输入的字符是2147483646,或者是基于可用内存的数量,以较小者为准.

所以我做了一个实验:我创造了2个TextBox,即textBox1textBox2.textBox2将显示实时字符数textBox1.另外,我将MaxLength属性更改0为两者TextBox …

c# textbox winforms

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

在Winform FlowLayoutPanel中模拟Windows拖动效果

我正在用户拖动鼠标时模拟窗口多选矩形.为了同步我们的理解,这张图片显示了我想要模拟的效果:

在此输入图像描述

现在我想在FlowLayoutPanel上模拟这个效果,里面有一些控件.

到目前为止,我设法几乎完成了效果:

在此输入图像描述

我在这里做的是在主窗体的顶部放置一个不聚焦的无边框半透明(不透明度的一半)形式.为了模拟边界,我处理SizeChangedPaint绘制边框.

但是,此解决方案有时会闪烁,因为在所有者边界无法按时清除:

在此输入图像描述

我尝试通过设置DoubleBuffer为覆盖表单使用双缓冲true,并覆盖CreateParam设置WM_EX_COMPOSITED,但都不起作用.

我的问题是:如何减少这个神器?

非常感谢!

我的代码:

对于封面形式:

public partial class CoverForm : Form
{
    public CoverForm()
    {
        InitializeComponent();

        BackColor = Color.CadetBlue;
        FormBorderStyle = FormBorderStyle.None;

        SizeChanged += (s, e) => Invalidate();
        Paint += (s, e) =>
                     {
                         e.Graphics.Clear(BackColor);

                         using (var pen = new Pen(Color.DodgerBlue))
                         {
                             e.Graphics.DrawRectangle(pen, 1, 1, Size.Width - 2, Size.Height - 2);
                         }
                     };
    }

    protected override bool ShowWithoutActivation
    { …
Run Code Online (Sandbox Code Playgroud)

.net c# drag winforms

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

具有%g的宽度和精度字段的fmt.Printf意外地表现

我试图得到一些使用相同宽度格式化的浮点数fmt.Printf().

例如,给定浮点值0.0606060606060606,0.3333333333333333,0.05,0.4和0.1818181818181818,我想将每个值格式化为10符文:

0.06060606
0.33333333
      0.05
       0.4
0.18181818
Run Code Online (Sandbox Code Playgroud)

但我无法理解它是如何完成的.文档说

对于浮点值,width设置字段的最小宽度,precision设置小数点后的位数(如果适用),但%g /%G除外,它设置总位数.例如,给定123.45格式%6.2f打印123.45而%.4g打印123.5.%e和%f的默认精度为6; 对于%g,它是唯一标识值所需的最小位数.

因此,如果我使用%f较大的数字将不适合10个字符的约束,因此%g是必需的.要获得最小宽度为10 %10g并获得最大数量的9位数(点的+1)%.9g,但将它们组合起来%10.9g并不像我期望的那样

0.0606060606
0.333333333
      0.05
       0.4
0.181818182
Run Code Online (Sandbox Code Playgroud)

为什么我得到10符文的字符串,其他的符文是11符文,其他符号是12符文?

特别是,似乎%.9g总共不产生9位数.参见例如:http://play.golang.org/p/ie9k8bYC7r

printf go

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

单击选项卡控件的选定选项卡页眉时如何触发事件

我正在使用C#进行Winform应用程序,并且我有一些标签页,比如说tabPage1,tabPage2并且tabPage3在选项卡控件中,并且tabPage1已被选中.

我想在单击任何标签页标题时触发事件,但我只能进行页面更改(通过使用SelectedIndexChanged),但不能单击选定的标签页标题.

我试过SelectingSelected事件,但他们两个都没有工作.我在MSDN上搜索但没有Click在页眉上找到任何定义的事件.那我该怎么做呢?

还有一个问题是,是否有可能以及如何DoubleClick选定的标签页上进行检测?

c# tabs winforms

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

就地行程长度编码算法

我遇到了一个面试问题:

给定输入String : aaaaabcddddee,将其转换为a5b1c1d4e2.

一个额外的约束是,这需要就地完成,意味着不应该使用额外的空间(数组).

保证编码的字符串始终适合原始字符串.换句话说,字符串abcde就不会出现,因为它将被编码为a1b1c1d1e1占用比原始字符串更多的空间.

一个提示采访者给我的是一次遍历字符串并找到保存的空间.

我有时会陷入困境,不使用额外的变量,输入字符串中的某些值可能会被覆盖.

任何建议将不胜感激?

string algorithm run-length-encoding

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

将超链接添加到当前 PowerPoint 中的幻灯片

我一直在寻找这个数小时,但找不到合适的方法来这样做。在 MSDN 上,他们建议使用AddressSubAddress定位演示文稿中的幻灯片,但这没有达到其目的。

所以我的问题是,如何在同一个演示文稿中向幻灯片添加超链接?

c# powerpoint interop

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

Go:使用strconv.ParseFloat将字符串转换为float返回0

我有以下代码:

reader := bufio.NewReader(os.Stdin)
fmt.Print("room: width x length: ")

inStr, _ := reader.ReadString('\n')
result := strings.Split(inStr, "x")

string1, _ := strconv.ParseFloat(result[0], 64)
string2, _ := strconv.ParseFloat(result[1], 64)
fmt.Print(string2)
Run Code Online (Sandbox Code Playgroud)

在最后一个print语句中,如果我打印string1它返回正确的值,但如果我尝试打印string2它返回0,无论我输入到控制台的值是什么.

有谁知道为什么会这样?谢谢!

go

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