我正在尝试创建一个功能,QTreeView如果没有选择任何项目,它将选择 中的最后一个项目。我不知道如何在程序中选择一个项目。到目前为止我已经尝试过这个,但它不起作用。
if (selectedItemList.length() == 0) // no items selected
{
QItemSelectionModel *selection = new QItemSelectionModel(treeWidget->model());
QModelIndex index = treeWidget->model()->index(treeWidget->model()->rowCount() - 1,
0, QModelIndex());
selection->select(index, QItemSelectionModel::Select);
treeWidget->setSelectionModel(selection);
return;
}
Run Code Online (Sandbox Code Playgroud)
treeWidget是一个QTreeWidget对象,selectedItemList是其中选定项目的列表。我将不胜感激所有的帮助。
我想知道在c ++ 11语法中是否有可能为多个项使用基于for for循环的新容器,例如:
std::vector<double> x;
std::vector<double> y;
for (double& xp, yp : x, y)
{
std::cout << xp << yp << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我无法找到有关将此循环用于多个容器的任何信息.我将非常感谢所有的帮助.
经典for循环中的示例效果:
std::vector<double>::iterator itX = m_x.begin();
std::vector<double>::iterator itY = m_y.begin();
for (uint32_t i = 0; i < m_x.size(); i++, itX++, itY++)
{
// operations on the m_x and m_y vectors
}
Run Code Online (Sandbox Code Playgroud) 在 C11 中,我可以创建一个原型如下所示的函数:
void myVaFunc(const char* const conv, ...);
Run Code Online (Sandbox Code Playgroud)
我可以这样运行它:
myVaFunc("ici", 1, "test", 2);
Run Code Online (Sandbox Code Playgroud)
该函数会知道(在解析第一个参数之后)有 3 个附加参数(4 个带有初始参数),因此类型为int、string(字符指针)和int. 简单,但不是很优雅。最近我了解了_Generic关键字,它允许在编译时派生变量的类型。我开始想知道是否有一种方法可以将可变参数功能(不再是功能,因为它总是需要第一个静态参数)和_Generic功能相结合。为什么?为了删除第一个参数,它告诉函数如何解析其他参数。可以这样调用的宏存在吗?
MYVAFUNC(1, "test", 2);
Run Code Online (Sandbox Code Playgroud)
并以与前面所述相同的方式工作myVaFunc?
我现在考虑了一段时间,但无法弄清楚这是否可能。
我正在尝试在我的 Qt 5.13.0 程序中使用 Windows 10 通知系统(从右侧面板弹出的通知系统,可从通知托盘图标获得)。我正在查看 Windows extras 类:https : //doc.qt.io/qt-5/qtwinextras-index.html但找不到任何此类 API。在 Qt 中甚至有可能吗?
我刚刚下载了 pugixml 库,我正在尝试使其适应我的需求。它主要面向我没有使用的 DOM 样式。我存储的数据如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<profile>
<points>
<point>
<index>0</index>
<x>0</x>
<y>50</y>
</point>
<point>
<index>1</index>
<x>2</x>
<y>49.9583</y>
</point>
<point>
<index>2</index>
<x>12</x>
<y>50.3083</y>
</point>
</points>
</profile>
Run Code Online (Sandbox Code Playgroud)
通常将数据存储为某个节点的文本内容 - 即这是一个节点。在这种情况下,节点没有值,而是有一个 node_pcdata 类型的子节点,其值为“这是一个节点”。pugixml 提供了 child_value() 和 text() 辅助函数来解析这些数据。
但是我在使用这些方法时遇到了问题,我没有得到节点值。
#include "pugixml.hpp"
#include <string.h>
#include <iostream>
int main()
{
pugi::xml_document doc;
if (!doc.load_file("/home/lukasz/Programy/eclipse_linux_projects/xmlTest/Debug/pidtest.xml"))
return -1;
pugi::xml_node points = doc.child("profile").child("points");
for (pugi::xml_node point = points.first_child(); point; point = points.next_sibling())
{
// ?
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何读出 for 中的索引、x 和 …
我有一个字符向量(实际上是无符号字符):
std::vector<unsigned char> vec;
Run Code Online (Sandbox Code Playgroud)
我想将其转换/复制到字符串对象。我尝试通过以下方式做到这一点:
std::string requestedName;
for (auto letter : vec)
{
requestedName.append((char)letter);
}
Run Code Online (Sandbox Code Playgroud)
但编译器表示这种转换是不可能的。我愿意提供所有帮助。
在qt框架中,大多数库信号和插槽使用指针作为参数.我想知道,如果我创建一个信号槽"结构",它将参考作为参数而不是指针,整个参数是否会被复制,或者只是4个字节(32位系统),就像常规的c ++参考一样?
我问这个是因为当我用参考参数创建信号/槽方法时我发现了一些东西.当我接下来的connect时候,QTCreator中的自动完成机制并没有像参与指针参数那样用参考参数提示我.他用常规参数暗示我.例如:
我创建了一个信号和插槽:
...
signals:
void mySignal(int& parameter);
private slots:
void on_mySignal(int& parameter);
Run Code Online (Sandbox Code Playgroud)
然后我尝试连接它们,Qt没有添加&参数参考:
...
connect(this, SIGNAL(mySignal(int)), this, SLOT(on_mySignal(int)));
Run Code Online (Sandbox Code Playgroud)
我必须手动更改为:
connect(this, SIGNAL(mySignal(int&)), this, SLOT(on_mySignal(int&)));
Run Code Online (Sandbox Code Playgroud)
因此,我想知道,甚至参考信号/插槽?我将非常感谢所有的帮助.
我有一个关于c/c ++中的内联函数和参数复制的问题.让我们假设我想在没有内联说明符的情况下运行此函数:
void my_func(int param)
{
my_inner_func(param);
}
Run Code Online (Sandbox Code Playgroud)
param将首先复制到my_func然后再复制到my_inner_func.如果函数my_func是inline,那么编译器只会复制param一次my_inner_func参数或两次.我将非常感谢所有的帮助.
编辑:如果它有所不同,我想请求c和c ++的解释.
我有 2 个包装宏用于断言函数输入参数:
/**
* @brief An assert wrapper with no value return in case assert fails.
* @param x_: value to test for being non zero.
*/
#define UTIL_ASSERT_VOID(x_) \
assert_param(x_); \
if (!x_) \
return; \
/**
* @brief An assert wrapper with a value return in case assert fails.
* @param x_: value to test for being non zero.
*/
#define UTIL_ASSERT_VAL(x_, ret_) \
assert_param(x_); \
if (!x_) \
return ret_; \
Run Code Online (Sandbox Code Playgroud)
前者用于返回 void 的函数,后者用于返回非 void 的函数。我想知道在 …
所以我在查看 Microchip 的 dsPIC MCU 头文件时偶然发现了这个结构:
/* Generic structure of entire SFR area for each UART module */
typedef struct tagUART {
uint16_t uxmode;
uint16_t uxsta;
uint16_t uxtxreg;
uint16_t uxrxreg;
uint16_t uxbrg;
} UART, *PUART;
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚这里的类型或实例是什么(以及这样设计的目的是什么):