小编era*_*lan的帖子

如何在QTextTable中更改行高

我正在编写从QTextEdit类派生的复杂的富文本编辑器.它必须能够插入,调整大小并将各种格式应用于嵌入式表.

我找到了设置列宽度的函数(setColumnWidthConstraints).但没有人可以change _rows_ heights.

有没有办法实现这个目标?

示例代码:

void CustomTextEdit::insertTable (int rows_cnt, int columns_cnt)
{
    QTextCursor cursor = textCursor ();
    QTextTableFormat table_format;
    table_format.setCellPadding (5);

    // TODO: This call just changed the frame border height, not table itself.
    //table_format.setHeight (50);

    // Setup columns widths - all is working perfectly.
    QVector <QTextLength> col_widths;
    for (int i = 0; i < columns_cnt; ++i)
        col_widths << QTextLength (QTextLength::PercentageLength, 100.0 / columns_cnt);
    table_format.setColumnWidthConstraints (col_widths);

    // ...But there is no similar function …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtextedit

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

如何将缩放的SVG渲染到QImage?

模块中有一个QSvgRendererQtSvg可以渲染图像QPaintDevice.这个可以QImage.在这种情况下,我们将创建:

Image svgBufferImage(renderer.defaultSize(), QImage::Format_ARGB32);
Run Code Online (Sandbox Code Playgroud)

但是如何QImage从SVG渲染器渲染到与默认大小不同的大小?由于SVG格式图像可以在没有质量损失的情况下进行缩放,是否可以使用QSvgRenderer?生成SVG文件中的静态图像,如PNG .

有没有人有更好的主意?基本上我需要从不同大小的SVG文件创建像PNG这样的图像.

qt svg image

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

"System.Math.Cos"可以返回(浮点)吗?

在C#中,它告诉我如何没有返回浮点数的"Math.Cos"函数.双精度是你可以获得的唯一值,因此强迫你将它投射到浮点数.像这样:
float val = (float)Math.Cos(someVal);

我需要使用浮点数,因为我在Direct3D中做了严格使用浮点数的东西.浮点数在图形世界中更常见(因为它现在是),因为它们是32位.

C#中是否有任何功能我可以使用它只是简单地处理浮点数,如C++可以做?

我不想包装任何C++的东西,因为这需要在XNA和Linux上运行OpenGL.

注意:如果代码没有将double转换为float,那将会很不错.

.net c# math floating-point double

14
推荐指数
3
解决办法
9684
查看次数

可以将互斥锁定功能标记为const

我有Document代表自定义文档的线程安全类.它有getter(const函数)和setter来修改它的状态.所有这些函数都受互斥保护,以保证在完全执行该方法之前文档不会更改.

但由于QMutex使用,我无法将状态访问功能标记为constmutable使用.捕捉QMutex改变它的状态.

这段代码是正确的,还是可以用更好的方式编写?没有hacky mutable使用.

class Document
{
    // This method should be const: it changes only mutex
    // and don't touch document state
    bool IsCorrect() const;
    ...
    mutable QMutex m_lock;
};

bool Document::IsCorrect() const
{
    // Capturing mutex object change it!
    QMutexLocker lock( &m_lock );
    ... Const-aware code
    bool result = ( m_context != NULL );
    ...
    return result;
}
Run Code Online (Sandbox Code Playgroud)

c++ const thread-safety qmutex

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

两个不同角度的旋转矩形之间的最小距离

如何计算两个矩形之间的最小距离?
对于没有角度(即0一度)的矩形来说很容易,但对于任何不同角度的旋转矩形我都不知道该怎么做.

你能推荐一下吗?

WhiteFlare

geometry

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

在执行C++ main()之前处理Mac OS X文件打开事件

我已经google了很多,但仍然找不到好的解决方案:/
所以,我将一个复杂的Qt5应用程序(某些网络服务的客户端)移植到Mac OS X(10.7.0"Lion"及更高版本).

我需要处理自定义文件*.xyz和自定义URL方案xyz://.
好的,Qt5有QFileOpenEvent类来处理OS X适当的事件.
但是:此事件仅在应用程序事件循环开始后才会到达(显然)!

我需要"捕获"并 main启动之前处理OS X'文件打开事件,因为程序逻辑仅用于处理命令行参数处理.

简化的main功能代码:

int main(int argc, char[]* argv)
{
     QApplication app( argc, argv );

     QStringList arguments = app.arguments();
     if( arguments.count() == argc ) arguments.removeFirst();

     Logic appLogic( NULL, &app );
     app.installMessageHandler( &appLogic );

     // The problem:
     // **This function will always called earlier than the any event**
     if( ! appLogic.start( arguments ) ) return 0;

     // Start processing of …
Run Code Online (Sandbox Code Playgroud)

c++ macos events qt qt5

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

如何用PEG语法描述函数参数

我还在和Qt的qmake模糊语法作斗争.

现在我找不到一种方法来描述可以包含括号的函数参数(例如regex):

functionName(arg1, "arg2", ^(arg3)+$)
Run Code Online (Sandbox Code Playgroud)

我试图像这样描述函数调用:

FunctionCall = Identifier space* "(" space* FunctionArgumentList? space* ")" space* eol*

FunctionArgumentList = FunctionArgumentString ((space* "," space* FunctionArgumentString)* / (blank* FunctionArgumentString)*)
FunctionArgumentString = ReplaceFunctionCall / TestFunctionCall / EnquotedString / RegularFunctionArgumentString
RegularFunctionArgumentString = RegularFunctionArgumentStringChar+
RegularFunctionArgumentStringChar = !(")" / blank / "," / quote / doublequote) SourceCharacter
SourceCharacter <- [\u0000-\uFFFC]
Run Code Online (Sandbox Code Playgroud)

如何在这种语法中添加对嵌入式括号的支持而不使用引号/双引号?如何区分函数参数和函数关闭中的括号?

有效函数调用示例:

contains(CMAKE_INSTALL_LIBS_DIR, ^(/usr)?/lib(64)?.*)
Run Code Online (Sandbox Code Playgroud)

javascript grammar parsing peg pegjs

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

如何正确使用qmake的“系统”命令输出

此类qmake项目 (*.pro) 代码在 Ubuntu Linux 下成功运行,但在 Windows 8 下则不能:

win32 {
    BUILD_TIME = $$system ("time /T")
}
else
{
    BUILD_TIME = $$system ("time")
}
message($$BUILD_TIME) # output the current time
Run Code Online (Sandbox Code Playgroud)

输出是“time /T”,即命令本身而不是命令执行值。这种行为是错误,还是只是我做错了?:)

UPD:我找到了另一种获取当前日期的方法:$$_DATE_。但是,我不喜欢使用未记录的功能 - 这是个坏主意。

PS 我的目标只是生成唯一的构建 ID 字符串。我正在使用 Qt 4.8.5。

qt qmake build qt4

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

如何在C++中将两个元组作为参数发送

您好我是C++的新手,我试图创建一个带有两个复数的程序,对它们进行优化并返回总和.

我打算做的是将两个元组发送到一个函数并返回一个元组.

typedef tuple<float, float> complex_tuple;
  complex_tuple a_tuple(a, b);
  complex_tuple b_tuple(c, d);


    cout << sum(a_tuple, b_tuple);
Run Code Online (Sandbox Code Playgroud)

这是我的功能:

tuple<float,float> sum(tuple<float, float>a, tuple<float, float>b){
  float a_real= get<0>(a);
  float a_imag= get<1>(a);
  float b_real= get<0>(b);
  float b_imag= get<1>(b);
  return tuple<float, float>(a_real+b_real, a_imag+b_imag);
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

0.cc:28:31: Error: no match for "operator<<" in "std::cout << sum(std::tuple<float, float>, std::tuple<float, float>)(b_tuple)"
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c++ typedef tuples function c++11

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

对 qmake TARGET 变量使用带空格的名称

iOS/OS X 应用程序名称通常包含空格(如“App Store.app”)。但是当我尝试在我的 Qt/ios 项目中使用这样的名称时:

ios: TARGET = "My Cool App"
Run Code Online (Sandbox Code Playgroud)

构建过程因 Qt Bash 脚本自动生成的奇怪错误而失败。

我做错了什么,还是不支持名称中的此类空格?

UPD 问题第一次出现在 qmake 生成的 shell 脚本中:

#!/bin/sh
cp -r $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME /Users/eraxillan/Projects/<PROJECT_DIR>
Run Code Online (Sandbox Code Playgroud)

如果$FULL_PRODUCT_NAME包含空格,则脚本将失败。

仅在自定义DESTDIR项目变量值的情况下生成和执行脚本- 我的情况。
因此,看起来像是qmake-generated 脚本中的一个错误,用于将项目构建工件复制到自定义输出目录。

解决方法:

  • 从目标名称中删除空格(My Cool App --> my-cool-app)
  • 根本不要使用自定义DESTDIR

希望这会有所帮助

bash qt qmake qt-creator ios

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

如何创建像 "Fn" + Key_Up 这样的 QKeySequence


正如我从 Qt 文档(QKeySequenceQt全局命名空间)中了解到的,我不能使用 notebookFn键作为快捷方式修饰符。
Qt 知道的唯一修饰符是:Shift, Control, Alt, Meta。但是没有Fn

但可能存在一些hacky方式?比如Fn直接指定代码。

代码:

m_actionGoToFirstPage->setShortcut( QKeySequence( Qt::Key_Up /*| Qt::Fn ???*/ ) );
Run Code Online (Sandbox Code Playgroud)

c++ qt keyboard-shortcuts

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

尝试打开bmp文件(C++)时fopen返回NULL?

FILE * in;
in = fopen("file1.bmp", "rb"); 
if (in == NULL) {
    perror("file1.bmp");
    return ;
}
Run Code Online (Sandbox Code Playgroud)

为什么我无法打开*.bmp文件.fopen()返回NULL.

任何人都可以帮助我如何成功打开BMP文件.我应该使用其他一些C++函数.如果是的话,请告诉我.一个例子非常有用.我在VS2008中使用VC++.

提前致谢.

c file-io fopen bmp visual-c++

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

CMake中的版本正则表达式

我想验证用户指定的版本字符串 - 以确保它包含三个以句点分隔的数字(e.g. 1.20.300).
但我不知道如何编写这样的正则表达式,下面的代码只是一个尝试:

if( PROJECT_VERSION MATCHES "([0-9]+).([0-9]+).([0-9+])" )
    message( "NOTE: Valid version string" )
else()
    message( FATAL_ERROR "Invalid version string" )
endif()
Run Code Online (Sandbox Code Playgroud)

那么,如何正确编写所需的正则表达式?
谢谢.

UPD
我的正则表达式也匹配1.2.3.4,但不应该!
只有三个以周期分隔的数字是可能的.

regex cmake

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