小编Nic*_*aus的帖子

是否可以在不调用QApplication :: exec()的情况下创建本地事件循环?

我想创建一个基于其构建的库,QTcpServerQTcpSocket用于在其main函数中没有事件循环的程序中(因为Qt事件循环是阻塞的,并且不能为所需的实时操作提供足够的时序分辨率).

我希望通过在类中创建本地事件循环来解决这个问题,但除非我app->exec()首先调用main函数,否则它们似乎不起作用.有没有办法创建本地事件循环并允许在线程内进行信号/插槽通信而无需应用程序级事件循环?

我已经看过有没有办法在没有QApplication :: exec()的情况下使用Qt?但答案没有帮助,因为似乎解决方案添加了本地事件循环但不删除应用程序循环.

c++ qt event-loop qeventloop qapplication

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

在Windows 10中不正确地缩放Qt桌面应用程序

我正在为Windows 10编写一个简单的Qt(Widgets)Gui应用程序.我正在使用Qt的5.6.0 beta版本.

我遇到的问题是它根本没有缩放到我的表面笔的屏幕上:

在此输入图像描述

这有点难以分辨,因为SO会缩放图像,但请注意停靠窗口小部件标题栏控制相对于窗口标题栏控件的小小.

来自Qt的这个链接谈到了扩展,但它主要集中在qml/qtQuick和移动应用程序上,而且似乎暗示在桌面QtWidgets应用程序中,QPainter将自动确定正确的缩放,这显然不是.

什么是确保桌面非qml Qt应用程序在高DPI监视器上正确扩展的最佳方法,特别是在Windows 10中?

c++ qt qtwidgets windows-10

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

当鼠标悬停在QPushButton上时,如何从QPushButton发出信号?

最近,QPushButton当鼠标指针进入时,我希望能发出信号.我该怎么做?

我知道QPushButton有一些已经定义的信号,如clicked(),pressed(),destory() 等等.但没有信号如hover(),enter(),...

我看了一些关于它的信息:有人说可以用css完成.我不明白.你能给我一些建议吗?谢谢!

qt mousehover

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

如何找到QDockWidget标题栏的高度?

我正在尝试找到QDockWidget标题栏的高度,以便对自定义布局进行一些智能大小调整,但标题栏不是一个单独的小部件,它内置于停靠小部件的私有布局中,并且没有成员访问它.还有其他方法可以找到它的高度吗?

c++ qt qdockwidget

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

确定插槽是否连接到给定信号

我很想知道是否有某种方法可以确定是否存在与我在类中定义的给定信号的连接.它基本上是一个处理数据的信号,我不关心它连接到什么,但我想要包括一个完整性检查,我不会将数据发送到它永远不会被看到的空白.我已经检查了确定连接到Qt中给定插槽的信号,但这是一个相反的问题.

c++ qt signals

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

从"融合"样式中删除QTreeView中的蓝色选择

我有一个QTreeView定义选择的样式表.但是,当我使用"融合"样式时,装饰上还有一个额外的蓝色选择矩形:

蓝色选择矩形

我已尝试show-decoration-selected: 0;在样式表中使用,以及设置setAllColumnsShowFocus(false);,但无法让它消失.

有没有办法禁用或重新设置覆盖装饰器的选择部分?

作为参考,这是样式表:

QTreeView, QListView, QToolBar, QTableView
{
    show-decoration-selected: 0;
    background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,
                            stop: 0 #797979, stop: 0.2 #CCCCCC,
                            stop: 1.0 #FFFFFF);
    alternate-background-color: #333333;
    background-image: url(:/metal_scratched);
    outline: 0; /* removes focus rectangle*/
}

QTreeView::section, QListView::section, QToolBar::section, QTableView::section
{
    border: 1px solid black;
}

QTreeView::item:hover:enabled, QListView::item:hover:enabled, QToolBar::item:hover:enabled, QTableView::item:hover:enabled
{
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                            stop: 0 transparent, stop: 0.4 rgba(150,150,150,0.5),
                            stop: 0.5 rgba(125,125,125,0.5), …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtreeview qtstylesheets

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

xorps在同一个寄存器上的目的是什么?

我正在查看以下反汇编的c ++代码

    auto test2 = convert<years, weeks>(2.0);
00007FF6D6475ECC  mov         eax,16Dh  
00007FF6D6475ED1  xorps       xmm1,xmm1  
00007FF6D6475ED4  cvtsi2sd    xmm1,rax  
00007FF6D6475ED9  mulsd       xmm1,mmword ptr [__real@4000000000000000 (07FF6D64AFE38h)]  
00007FF6D6475EE1  divsd       xmm1,mmword ptr [__real@401c000000000000 (07FF6D64AFE58h)] 
Run Code Online (Sandbox Code Playgroud)

并且很好奇xorps xmm1, xmm1教学的重点是什么.似乎任何数字xor本身只会给0?如果是这样,清除登记册的目的是什么?

注意:我只是出于纯粹的好奇而问这个问题.我对汇编语言知之甚少.

c++ assembly

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

写死亡测试来验证std :: set_terminate行为

我正在使用gtest为异常处理代码编写一些单元测试.举一个简单的例子,假设我想让我的程序abort处理任何未处理的异常,所以我创建了以下测试:

TEST_F(myFixture, myTest)
{
    std::set_terminate([](){std::abort(); });

    EXPECT_DEATH(throw std::runtime_error("terminate"), ".*");
}
Run Code Online (Sandbox Code Playgroud)

我希望这会成功,因为abort应该在程序上调用.但是,我的实际结果是:

错误:死亡测试:抛出std :: runtime_error("终止")

结果:抛出异常.
错误消息:

[
死] [死] main.cpp(122)::捕获std :: exception-derived异常转义死亡测试语句.异常消息:终止

[死亡]

我认为gtest的异常处理程序正在阻碍.我已经尝试使用GTEST_CATCH_EXCEPTIONS环境变量和高级指南中--gtest_catch_exceptions=0提到的命令行标志禁用它们,但我得到了相同的结果.

我做错了什么,或者是"异常死亡"而不是gtest可以测试的东西?

c++ exception-handling exception googletest c++11

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

在cmake中使用qrc编译10MB +资源文件会导致堆空间分配失败

我正在尝试使用CMake使用qrc编译大型资源文件.

众所周知,这会扼杀所有计算机RAM(> 32GB)并导致编译器以堆分配错误退出(参见QTBUG-50468,QTBUG-55293QTBUG-54357)

显然,如果你使用qmake,附加CONFIG += resources_big到.pro文件会自动修复所有内容.是否可以通过CMake访问此设置?

cmake qt5 qt-resource

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

Qt连接功能 - 使用lambdas信号消歧

我正在使用c ++ 11连接语法,并使用此connect语句获得以下错误:

connect(fileSystemCompleter, &QCompleter::activated, [&] (QModelIndex index)
{
    fileSystemPathEdit->setFocus(Qt::PopupFocusReason);
});
Run Code Online (Sandbox Code Playgroud)

错误:

error C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const' : cannot convert parameter 2 from 'overloaded-function' to 'const char *'
Context does not allow for disambiguation of overloaded function
Run Code Online (Sandbox Code Playgroud)

是否有可能以某种方式重写它,以便编译器能够消除重载函数的歧义?

编辑:

从Qt项目......

超载

正如您在示例中看到的那样,连接到QAbstractSocket :: error并不是很漂亮,因为错误有重载,并且获取重载函数的地址需要显式转换.

一些宏可以帮助(使用c ++ 11或typeof扩展)

最好的事情可能是建议不要过载信号或插槽......

...但是我们在过去的Qt次要版本中添加了重载,因为获取函数的地址不是我们支持的用例.但是,如果不打破源兼容性,这将是不可能的.

有什么想法这个宏究竟是什么样的?或者如何进行显式投射?

c++ lambda qt c++11

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